@typed/fx 1.22.2 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/cjs/AsyncData.js.map +1 -1
  2. package/dist/cjs/Form.js.map +1 -1
  3. package/dist/cjs/FormEntry.js.map +1 -1
  4. package/dist/cjs/Fx.js +1 -1
  5. package/dist/cjs/Fx.js.map +1 -1
  6. package/dist/cjs/Idle.js.map +1 -1
  7. package/dist/cjs/Match.js.map +1 -1
  8. package/dist/cjs/Pull.js +5 -3
  9. package/dist/cjs/Pull.js.map +1 -1
  10. package/dist/cjs/RefArray.js.map +1 -1
  11. package/dist/cjs/RefChunk.js.map +1 -1
  12. package/dist/cjs/RefHashSet.js.map +1 -1
  13. package/dist/cjs/RefSubject.js +3 -2
  14. package/dist/cjs/RefSubject.js.map +1 -1
  15. package/dist/cjs/Sink.js.map +1 -1
  16. package/dist/cjs/Subject.js.map +1 -1
  17. package/dist/cjs/Versioned.js.map +1 -1
  18. package/dist/cjs/internal/core.js.map +1 -1
  19. package/dist/cjs/internal/helpers.js.map +1 -1
  20. package/dist/cjs/internal/keyed.js +1 -1
  21. package/dist/cjs/internal/keyed.js.map +1 -1
  22. package/dist/cjs/internal/provide.js.map +1 -1
  23. package/dist/cjs/internal/share.js.map +1 -1
  24. package/dist/cjs/internal/sync-producer.js.map +1 -1
  25. package/dist/dts/AsyncData.d.ts +53 -53
  26. package/dist/dts/AsyncData.d.ts.map +1 -1
  27. package/dist/dts/Emitter.d.ts +7 -7
  28. package/dist/dts/Emitter.d.ts.map +1 -1
  29. package/dist/dts/Form.d.ts +14 -14
  30. package/dist/dts/Form.d.ts.map +1 -1
  31. package/dist/dts/FormEntry.d.ts +11 -11
  32. package/dist/dts/FormEntry.d.ts.map +1 -1
  33. package/dist/dts/Fx.d.ts +417 -417
  34. package/dist/dts/Fx.d.ts.map +1 -1
  35. package/dist/dts/Guard.d.ts +21 -21
  36. package/dist/dts/Guard.d.ts.map +1 -1
  37. package/dist/dts/Idle.d.ts +12 -12
  38. package/dist/dts/Idle.d.ts.map +1 -1
  39. package/dist/dts/Match.d.ts +16 -16
  40. package/dist/dts/Match.d.ts.map +1 -1
  41. package/dist/dts/Pull.d.ts +5 -5
  42. package/dist/dts/Pull.d.ts.map +1 -1
  43. package/dist/dts/Push.d.ts +40 -40
  44. package/dist/dts/Push.d.ts.map +1 -1
  45. package/dist/dts/RefArray.d.ts +59 -59
  46. package/dist/dts/RefArray.d.ts.map +1 -1
  47. package/dist/dts/RefChunk.d.ts +45 -45
  48. package/dist/dts/RefChunk.d.ts.map +1 -1
  49. package/dist/dts/RefHashMap.d.ts +35 -35
  50. package/dist/dts/RefHashMap.d.ts.map +1 -1
  51. package/dist/dts/RefHashSet.d.ts +17 -17
  52. package/dist/dts/RefHashSet.d.ts.map +1 -1
  53. package/dist/dts/RefSubject.d.ts +136 -136
  54. package/dist/dts/RefSubject.d.ts.map +1 -1
  55. package/dist/dts/Sink.d.ts +63 -63
  56. package/dist/dts/Sink.d.ts.map +1 -1
  57. package/dist/dts/Stream.d.ts +11 -11
  58. package/dist/dts/Stream.d.ts.map +1 -1
  59. package/dist/dts/Subject.d.ts +13 -13
  60. package/dist/dts/Subject.d.ts.map +1 -1
  61. package/dist/dts/Typeclass.d.ts +1 -1
  62. package/dist/dts/Typeclass.d.ts.map +1 -1
  63. package/dist/dts/Versioned.d.ts +33 -33
  64. package/dist/dts/Versioned.d.ts.map +1 -1
  65. package/dist/dts/index.d.ts +1 -1
  66. package/dist/dts/internal/DeferredRef.d.ts +8 -8
  67. package/dist/dts/internal/DeferredRef.d.ts.map +1 -1
  68. package/dist/dts/internal/core.d.ts +191 -191
  69. package/dist/dts/internal/core.d.ts.map +1 -1
  70. package/dist/dts/internal/effect-loop-operator.d.ts +6 -6
  71. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
  72. package/dist/dts/internal/effect-operator.d.ts +16 -16
  73. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  74. package/dist/dts/internal/effect-producer.d.ts +13 -13
  75. package/dist/dts/internal/effect-producer.d.ts.map +1 -1
  76. package/dist/dts/internal/helpers.d.ts +26 -26
  77. package/dist/dts/internal/helpers.d.ts.map +1 -1
  78. package/dist/dts/internal/keyed.d.ts +1 -1
  79. package/dist/dts/internal/keyed.d.ts.map +1 -1
  80. package/dist/dts/internal/loop-operator.d.ts +2 -2
  81. package/dist/dts/internal/loop-operator.d.ts.map +1 -1
  82. package/dist/dts/internal/operator.d.ts +2 -2
  83. package/dist/dts/internal/operator.d.ts.map +1 -1
  84. package/dist/dts/internal/protos.d.ts +12 -12
  85. package/dist/dts/internal/protos.d.ts.map +1 -1
  86. package/dist/dts/internal/provide.d.ts +15 -15
  87. package/dist/dts/internal/provide.d.ts.map +1 -1
  88. package/dist/dts/internal/share.d.ts +11 -11
  89. package/dist/dts/internal/share.d.ts.map +1 -1
  90. package/dist/dts/internal/sync-operator.d.ts +2 -2
  91. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  92. package/dist/dts/internal/sync-producer.d.ts +6 -6
  93. package/dist/dts/internal/sync-producer.d.ts.map +1 -1
  94. package/dist/dts/internal/withKey.d.ts +1 -1
  95. package/dist/dts/internal/withKey.d.ts.map +1 -1
  96. package/dist/esm/AsyncData.js.map +1 -1
  97. package/dist/esm/Form.js.map +1 -1
  98. package/dist/esm/FormEntry.js.map +1 -1
  99. package/dist/esm/Fx.js +1 -1
  100. package/dist/esm/Fx.js.map +1 -1
  101. package/dist/esm/Idle.js.map +1 -1
  102. package/dist/esm/Match.js.map +1 -1
  103. package/dist/esm/Pull.js +3 -3
  104. package/dist/esm/Pull.js.map +1 -1
  105. package/dist/esm/RefArray.js.map +1 -1
  106. package/dist/esm/RefChunk.js.map +1 -1
  107. package/dist/esm/RefHashSet.js.map +1 -1
  108. package/dist/esm/RefSubject.js +3 -1
  109. package/dist/esm/RefSubject.js.map +1 -1
  110. package/dist/esm/Sink.js.map +1 -1
  111. package/dist/esm/Subject.js.map +1 -1
  112. package/dist/esm/Versioned.js.map +1 -1
  113. package/dist/esm/index.js +1 -1
  114. package/dist/esm/internal/core.js.map +1 -1
  115. package/dist/esm/internal/helpers.js.map +1 -1
  116. package/dist/esm/internal/keyed.js +1 -1
  117. package/dist/esm/internal/keyed.js.map +1 -1
  118. package/dist/esm/internal/provide.js.map +1 -1
  119. package/dist/esm/internal/share.js.map +1 -1
  120. package/dist/esm/internal/sync-producer.js.map +1 -1
  121. package/package.json +6 -6
  122. package/src/AsyncData.ts +142 -144
  123. package/src/Emitter.ts +13 -13
  124. package/src/Form.ts +55 -55
  125. package/src/FormEntry.ts +39 -39
  126. package/src/Fx.ts +788 -789
  127. package/src/Guard.ts +43 -43
  128. package/src/Idle.ts +26 -26
  129. package/src/Match.ts +60 -61
  130. package/src/Pull.ts +42 -43
  131. package/src/Push.ts +195 -195
  132. package/src/RefArray.ts +121 -119
  133. package/src/RefChunk.ts +98 -97
  134. package/src/RefHashMap.ts +79 -79
  135. package/src/RefHashSet.ts +40 -39
  136. package/src/RefSubject.ts +574 -565
  137. package/src/Sink.ts +303 -303
  138. package/src/Stream.ts +27 -27
  139. package/src/Subject.ts +48 -46
  140. package/src/Typeclass.ts +2 -2
  141. package/src/Versioned.ts +97 -97
  142. package/src/index.ts +1 -1
  143. package/src/internal/DeferredRef.ts +7 -7
  144. package/src/internal/core.ts +768 -781
  145. package/src/internal/effect-loop-operator.ts +7 -7
  146. package/src/internal/effect-operator.ts +23 -23
  147. package/src/internal/effect-producer.ts +38 -38
  148. package/src/internal/helpers.ts +51 -51
  149. package/src/internal/keyed.ts +21 -21
  150. package/src/internal/loop-operator.ts +2 -2
  151. package/src/internal/operator.ts +2 -2
  152. package/src/internal/protos.ts +15 -15
  153. package/src/internal/provide.ts +27 -27
  154. package/src/internal/share.ts +25 -25
  155. package/src/internal/sync-operator.ts +4 -4
  156. package/src/internal/sync-producer.ts +15 -15
  157. package/src/internal/withKey.ts +13 -13
package/src/Sink.ts CHANGED
@@ -17,9 +17,9 @@ import { type Bounds } from "./internal/bounds.js"
17
17
  * Sink is a data structure which can be used to consume values from a stream.
18
18
  * @since 1.20.0
19
19
  */
20
- export interface Sink<out R, in E, in A> {
21
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown>
22
- onSuccess(value: A): Effect.Effect<R, never, unknown>
20
+ export interface Sink<in A, in E = never, out R = never> {
21
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R>
22
+ onSuccess(value: A): Effect.Effect<unknown, never, R>
23
23
  }
24
24
 
25
25
  /**
@@ -29,24 +29,24 @@ export namespace Sink {
29
29
  /**
30
30
  * @since 1.20.0
31
31
  */
32
- export type Context<T> = T extends Sink<infer R, infer _E, infer _A> ? R : never
32
+ export type Context<T> = T extends Sink<infer _A, infer _E, infer R> ? R : never
33
33
 
34
34
  /**
35
35
  * @since 1.20.0
36
36
  */
37
- export type Error<T> = T extends Sink<infer _R, infer E, infer _A> ? E : never
37
+ export type Error<T> = T extends Sink<infer _A, infer E, infer _R> ? E : never
38
38
 
39
39
  /**
40
40
  * @since 1.20.0
41
41
  */
42
- export type Success<T> = T extends Sink<infer _R, infer _E, infer A> ? A : never
42
+ export type Success<T> = T extends Sink<infer A, infer _E, infer _R> ? A : never
43
43
 
44
44
  /**
45
45
  * @since 1.20.0
46
46
  */
47
- export interface Tagged<I, E, A> extends Sink<I, E, A> {
48
- readonly tag: C.Tagged<I, Sink<never, E, A>>
49
- readonly make: <R>(sink: Sink<R, E, A>) => Layer.Layer<R, never, I>
47
+ export interface Tagged<A, E, I> extends Sink<A, E, I> {
48
+ readonly tag: C.Tagged<I, Sink<A, E>>
49
+ readonly make: <R>(sink: Sink<A, E, R>) => Layer.Layer<I, never, R>
50
50
  }
51
51
  }
52
52
 
@@ -69,9 +69,9 @@ export type Success<T> = Sink.Success<T>
69
69
  * @since 1.20.0
70
70
  */
71
71
  export function make<E, R, A, R2>(
72
- onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R, never, unknown>,
73
- onSuccess: (value: A) => Effect.Effect<R2, never, unknown>
74
- ): Sink<R | R2, E, A> {
72
+ onFailure: (cause: Cause.Cause<E>) => Effect.Effect<unknown, never, R>,
73
+ onSuccess: (value: A) => Effect.Effect<unknown, never, R2>
74
+ ): Sink<A, E, R | R2> {
75
75
  return {
76
76
  onFailure,
77
77
  onSuccess
@@ -84,19 +84,19 @@ export function make<E, R, A, R2>(
84
84
  * @since 1.18.0
85
85
  * @category models
86
86
  */
87
- export interface WithEarlyExit<R, E, A> extends Sink<R, E, A> {
88
- readonly earlyExit: Effect.Effect<never, never, void>
87
+ export interface WithEarlyExit<A, E = never, R = never> extends Sink<A, E, R> {
88
+ readonly earlyExit: Effect.Effect<void>
89
89
  }
90
90
 
91
91
  /**
92
92
  * @since 1.20.0
93
93
  */
94
- export function withEarlyExit<R, E, A, R2, B>(
95
- sink: Sink<R, E, A>,
96
- f: (sink: WithEarlyExit<R, E, A>) => Effect.Effect<R2, E, B>
97
- ): Effect.Effect<R | R2, never, void> {
98
- return Effect.asyncEffect<never, never, void, R | R2, never, void>((resume) => {
99
- const earlyExit: WithEarlyExit<R, E, A> = {
94
+ export function withEarlyExit<A, E, R, B, R2>(
95
+ sink: Sink<A, E, R>,
96
+ f: (sink: WithEarlyExit<A, E, R>) => Effect.Effect<B, E, R2>
97
+ ): Effect.Effect<void, never, R | R2> {
98
+ return Effect.asyncEffect<void, never, never, void, never, R | R2>((resume) => {
99
+ const earlyExit: WithEarlyExit<A, E, R> = {
100
100
  ...sink,
101
101
  earlyExit: Effect.sync(() => resume(Effect.unit))
102
102
  }
@@ -114,25 +114,25 @@ export function withEarlyExit<R, E, A, R2, B>(
114
114
  * @category combinators
115
115
  */
116
116
  export const map: {
117
- <B, A>(f: (b: B) => A): <R, E>(sink: Sink<R, E, A>) => Sink<R, E, B>
118
- <R, E, A, B>(sink: Sink<R, E, A>, f: (b: B) => A): Sink<R, E, B>
119
- } = dual(2, function map<R, E, A, B>(
120
- sink: Sink<R, E, A>,
117
+ <B, A>(f: (b: B) => A): <E, R>(sink: Sink<A, E, R>) => Sink<B, E, R>
118
+ <A, E, R, B>(sink: Sink<A, E, R>, f: (b: B) => A): Sink<B, E, R>
119
+ } = dual(2, function map<A, E, R, B>(
120
+ sink: Sink<A, E, R>,
121
121
  f: (b: B) => A
122
- ): Sink<R, E, B> {
122
+ ): Sink<B, E, R> {
123
123
  return new MapSink(sink, f)
124
124
  })
125
125
 
126
- class MapSink<R, E, A, B> implements Sink<R, E, A> {
126
+ class MapSink<A, E, R, B> implements Sink<A, E, R> {
127
127
  constructor(
128
- readonly sink: Sink<R, E, B>,
128
+ readonly sink: Sink<B, E, R>,
129
129
  readonly f: (a: A) => B
130
130
  ) {
131
131
  this.onFailure = this.onFailure.bind(this)
132
132
  this.onSuccess = this.onSuccess.bind(this)
133
133
  }
134
134
 
135
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
135
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
136
136
  return this.sink.onFailure(cause)
137
137
  }
138
138
 
@@ -144,20 +144,20 @@ class MapSink<R, E, A, B> implements Sink<R, E, A> {
144
144
  /**
145
145
  * @since 1.20.0
146
146
  */
147
- export function filter<R, E, A>(sink: Sink<R, E, A>, predicate: Predicate.Predicate<A>): Sink<R, E, A> {
147
+ export function filter<A, E, R>(sink: Sink<A, E, R>, predicate: Predicate.Predicate<A>): Sink<A, E, R> {
148
148
  return new FilterSink(sink, predicate)
149
149
  }
150
150
 
151
- class FilterSink<R, E, A> implements Sink<R, E, A> {
151
+ class FilterSink<A, E, R> implements Sink<A, E, R> {
152
152
  constructor(
153
- readonly sink: Sink<R, E, A>,
153
+ readonly sink: Sink<A, E, R>,
154
154
  readonly predicate: Predicate.Predicate<A>
155
155
  ) {
156
156
  this.onFailure = this.onFailure.bind(this)
157
157
  this.onSuccess = this.onSuccess.bind(this)
158
158
  }
159
159
 
160
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
160
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
161
161
  return this.sink.onFailure(cause)
162
162
  }
163
163
 
@@ -170,20 +170,20 @@ class FilterSink<R, E, A> implements Sink<R, E, A> {
170
170
  /**
171
171
  * @since 1.20.0
172
172
  */
173
- export function filterMap<R, E, A, B>(sink: Sink<R, E, B>, f: (a: A) => Option.Option<B>): Sink<R, E, A> {
173
+ export function filterMap<A, E, R, B>(sink: Sink<B, E, R>, f: (a: A) => Option.Option<B>): Sink<A, E, R> {
174
174
  return new FilterMapSink(sink, f)
175
175
  }
176
176
 
177
- class FilterMapSink<R, E, A, B> implements Sink<R, E, A> {
177
+ class FilterMapSink<A, E, R, B> implements Sink<A, E, R> {
178
178
  constructor(
179
- readonly sink: Sink<R, E, B>,
179
+ readonly sink: Sink<B, E, R>,
180
180
  readonly f: (a: A) => Option.Option<B>
181
181
  ) {
182
182
  this.onFailure = this.onFailure.bind(this)
183
183
  this.onSuccess = this.onSuccess.bind(this)
184
184
  }
185
185
 
186
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
186
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
187
187
  return this.sink.onFailure(cause)
188
188
  }
189
189
 
@@ -198,27 +198,27 @@ class FilterMapSink<R, E, A, B> implements Sink<R, E, A> {
198
198
  * @since 1.20.0
199
199
  */
200
200
  export const mapEffect: {
201
- <B, R2, E2, A>(f: (b: B) => Effect.Effect<R2, E2, A>): <R, E>(
202
- sink: Sink<R, E | E2, A>
203
- ) => Sink<R | R2, E | E2, B>
204
- <R, E, A, R2, E2, B>(sink: Sink<R, E | E2, A>, f: (b: B) => Effect.Effect<R2, E2, A>): Sink<R | R2, E | E2, B>
205
- } = dual(2, function mapEffect<R, E, A, R2, E2, B>(
206
- sink: Sink<R, E | E2, A>,
207
- f: (b: B) => Effect.Effect<R2, E2, A>
208
- ): Sink<R | R2, E | E2, B> {
201
+ <B, A, E2, R2>(f: (b: B) => Effect.Effect<A, E2, R2>): <E, R>(
202
+ sink: Sink<A, E | E2, R>
203
+ ) => Sink<B, E | E2, R | R2>
204
+ <A, E, R, B, E2, R2>(sink: Sink<A, E | E2, R>, f: (b: B) => Effect.Effect<A, E2, R2>): Sink<B, E | E2, R | R2>
205
+ } = dual(2, function mapEffect<A, E, R, B, E2, R2>(
206
+ sink: Sink<A, E | E2, R>,
207
+ f: (b: B) => Effect.Effect<A, E2, R2>
208
+ ): Sink<B, E | E2, R | R2> {
209
209
  return new MapEffectSink(sink, f)
210
210
  })
211
211
 
212
- class MapEffectSink<R, E, A, R2, E2, B> implements Sink<R | R2, E2, B> {
212
+ class MapEffectSink<A, E, R, B, E2, R2> implements Sink<B, E2, R | R2> {
213
213
  constructor(
214
- readonly sink: Sink<R, E | E2, A>,
215
- readonly f: (b: B) => Effect.Effect<R2, E2, A>
214
+ readonly sink: Sink<A, E | E2, R>,
215
+ readonly f: (b: B) => Effect.Effect<A, E2, R2>
216
216
  ) {
217
217
  this.onFailure = this.onFailure.bind(this)
218
218
  this.onSuccess = this.onSuccess.bind(this)
219
219
  }
220
220
 
221
- onFailure(cause: Cause.Cause<E2>): Effect.Effect<R | R2, never, unknown> {
221
+ onFailure(cause: Cause.Cause<E2>): Effect.Effect<unknown, never, R | R2> {
222
222
  return this.sink.onFailure(cause)
223
223
  }
224
224
 
@@ -231,31 +231,31 @@ class MapEffectSink<R, E, A, R2, E2, B> implements Sink<R | R2, E2, B> {
231
231
  * @since 1.20.0
232
232
  */
233
233
  export const filterMapEffect: {
234
- <B, R2, E2, A>(f: (b: B) => Effect.Effect<R2, E2, Option.Option<A>>): <R, E>(
235
- sink: Sink<R, E | E2, A>
236
- ) => Sink<R | R2, E | E2, B>
237
-
238
- <R, E, A, R2, E2, B>(
239
- sink: Sink<R, E | E2, A>,
240
- f: (b: B) => Effect.Effect<R2, E2, Option.Option<A>>
241
- ): Sink<R | R2, E | E2, B>
242
- } = dual(2, function filterMapEffect<R, E, A, R2, E2, B>(
243
- sink: Sink<R, E | E2, A>,
244
- f: (b: B) => Effect.Effect<R2, E2, Option.Option<A>>
245
- ): Sink<R | R2, E | E2, B> {
234
+ <B, A, E2, R2>(f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>): <E, R>(
235
+ sink: Sink<A, E | E2, R>
236
+ ) => Sink<B, E | E2, R | R2>
237
+
238
+ <A, E, R, B, E2, R2>(
239
+ sink: Sink<A, E | E2, R>,
240
+ f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>
241
+ ): Sink<B, E | E2, R | R2>
242
+ } = dual(2, function filterMapEffect<A, E, R, B, E2, R2>(
243
+ sink: Sink<A, E | E2, R>,
244
+ f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>
245
+ ): Sink<B, E | E2, R | R2> {
246
246
  return new FilterMapEffectSink(sink, f)
247
247
  })
248
248
 
249
- class FilterMapEffectSink<R, E, A, R2, E2, B> implements Sink<R | R2, E2, B> {
249
+ class FilterMapEffectSink<A, E, R, B, E2, R2> implements Sink<B, E2, R | R2> {
250
250
  constructor(
251
- readonly sink: Sink<R, E | E2, A>,
252
- readonly f: (b: B) => Effect.Effect<R2, E2, Option.Option<A>>
251
+ readonly sink: Sink<A, E | E2, R>,
252
+ readonly f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>
253
253
  ) {
254
254
  this.onFailure = this.onFailure.bind(this)
255
255
  this.onSuccess = this.onSuccess.bind(this)
256
256
  }
257
257
 
258
- onFailure(cause: Cause.Cause<E2>): Effect.Effect<R | R2, never, unknown> {
258
+ onFailure(cause: Cause.Cause<E2>): Effect.Effect<unknown, never, R | R2> {
259
259
  return this.sink.onFailure(cause)
260
260
  }
261
261
 
@@ -274,27 +274,27 @@ class FilterMapEffectSink<R, E, A, R2, E2, B> implements Sink<R | R2, E2, B> {
274
274
  * @since 1.20.0
275
275
  */
276
276
  export const filterEffect: {
277
- <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(
278
- sink: Sink<R, E | E2, A>
279
- ) => Sink<R | R2, E | E2, A>
280
- <R, E, A>(sink: Sink<R, E, A>, f: (a: A) => Effect.Effect<R, E, boolean>): Sink<R, E, A>
281
- } = dual(2, function filterEffect<R, E, A, R2>(
282
- sink: Sink<R, E, A>,
283
- f: (a: A) => Effect.Effect<R2, E, boolean>
284
- ): Sink<R | R2, E, A> {
285
- return new FilterEffectSink<R | R2, E, A>(sink, f)
277
+ <A, E2, R2>(f: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(
278
+ sink: Sink<A, E | E2, R>
279
+ ) => Sink<A, E | E2, R | R2>
280
+ <A, E, R>(sink: Sink<A, E, R>, f: (a: A) => Effect.Effect<boolean, E, R>): Sink<A, E, R>
281
+ } = dual(2, function filterEffect<A, E, R, R2>(
282
+ sink: Sink<A, E, R>,
283
+ f: (a: A) => Effect.Effect<boolean, E, R2>
284
+ ): Sink<A, E, R | R2> {
285
+ return new FilterEffectSink<A, E, R | R2>(sink, f)
286
286
  })
287
287
 
288
- class FilterEffectSink<R, E, A> implements Sink<R, E, A> {
288
+ class FilterEffectSink<A, E, R> implements Sink<A, E, R> {
289
289
  constructor(
290
- readonly sink: Sink<R, E, A>,
291
- readonly f: (a: A) => Effect.Effect<R, E, boolean>
290
+ readonly sink: Sink<A, E, R>,
291
+ readonly f: (a: A) => Effect.Effect<boolean, E, R>
292
292
  ) {
293
293
  this.onFailure = this.onFailure.bind(this)
294
294
  this.onSuccess = this.onSuccess.bind(this)
295
295
  }
296
296
 
297
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
297
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
298
298
  return this.sink.onFailure(cause)
299
299
  }
300
300
 
@@ -313,27 +313,27 @@ class FilterEffectSink<R, E, A> implements Sink<R, E, A> {
313
313
  * @since 1.20.0
314
314
  */
315
315
  export const tapEffect: {
316
- <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, unknown>): <R, E>(
317
- sink: Sink<R, E | E2, A>
318
- ) => Sink<R | R2, E | E2, A>
319
- <R, E, A, R2, E2>(sink: Sink<R, E | E2, A>, f: (a: A) => Effect.Effect<R2, E2, unknown>): Sink<R | R2, E | E2, A>
320
- } = dual(2, function tapEffect<R, E, A, R2, E2>(
321
- sink: Sink<R, E | E2, A>,
322
- f: (a: A) => Effect.Effect<R2, E2, unknown>
323
- ): Sink<R | R2, E | E2, A> {
316
+ <A, E2, R2>(f: (a: A) => Effect.Effect<unknown, E2, R2>): <E, R>(
317
+ sink: Sink<A, E | E2, R>
318
+ ) => Sink<A, E | E2, R | R2>
319
+ <A, E, R, E2, R2>(sink: Sink<A, E | E2, R>, f: (a: A) => Effect.Effect<unknown, E2, R2>): Sink<A, E | E2, R | R2>
320
+ } = dual(2, function tapEffect<A, E, R, E2, R2>(
321
+ sink: Sink<A, E | E2, R>,
322
+ f: (a: A) => Effect.Effect<unknown, E2, R2>
323
+ ): Sink<A, E | E2, R | R2> {
324
324
  return new TapEffectSink(sink, f)
325
325
  })
326
326
 
327
- class TapEffectSink<R, E, A, R2, E2> implements Sink<R | R2, E, A> {
327
+ class TapEffectSink<A, E, R, E2, R2> implements Sink<A, E, R | R2> {
328
328
  constructor(
329
- readonly sink: Sink<R, E | E2, A>,
330
- readonly f: (a: A) => Effect.Effect<R2, E2, unknown>
329
+ readonly sink: Sink<A, E | E2, R>,
330
+ readonly f: (a: A) => Effect.Effect<unknown, E2, R2>
331
331
  ) {
332
332
  this.onFailure = this.onFailure.bind(this)
333
333
  this.onSuccess = this.onSuccess.bind(this)
334
334
  }
335
335
 
336
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R | R2, never, unknown> {
336
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R | R2> {
337
337
  return this.sink.onFailure(cause)
338
338
  }
339
339
 
@@ -349,21 +349,21 @@ class TapEffectSink<R, E, A, R2, E2> implements Sink<R | R2, E, A> {
349
349
  * @since 1.20.0
350
350
  */
351
351
  export const loop: {
352
- <B, A, C>(seed: B, f: (acc: B, a: A) => readonly [C, B]): <R, E>(
353
- sink: Sink<R, E, C>
354
- ) => Sink<R, E, A>
355
- <R, E, A, B, C>(sink: Sink<R, E, C>, seed: B, f: (acc: B, a: A) => readonly [C, B]): Sink<R, E, A>
356
- } = dual(3, function loop<R, E, A, B, C>(
357
- sink: Sink<R, E, C>,
352
+ <B, A, C>(seed: B, f: (acc: B, a: A) => readonly [C, B]): <E, R>(
353
+ sink: Sink<C, E, R>
354
+ ) => Sink<A, E, R>
355
+ <A, E, R, B, C>(sink: Sink<C, E, R>, seed: B, f: (acc: B, a: A) => readonly [C, B]): Sink<A, E, R>
356
+ } = dual(3, function loop<A, E, R, B, C>(
357
+ sink: Sink<C, E, R>,
358
358
  seed: B,
359
359
  f: (acc: B, a: A) => readonly [C, B]
360
- ): Sink<R, E, A> {
360
+ ): Sink<A, E, R> {
361
361
  return new LoopSink(sink, seed, f)
362
362
  })
363
363
 
364
- class LoopSink<R, E, A, B, C> implements Sink<R, E, A> {
364
+ class LoopSink<A, E, R, B, C> implements Sink<A, E, R> {
365
365
  constructor(
366
- readonly sink: Sink<R, E, C>,
366
+ readonly sink: Sink<C, E, R>,
367
367
  private seed: B,
368
368
  readonly f: (acc: B, a: A) => readonly [C, B]
369
369
  ) {
@@ -371,7 +371,7 @@ class LoopSink<R, E, A, B, C> implements Sink<R, E, A> {
371
371
  this.onSuccess = this.onSuccess.bind(this)
372
372
  }
373
373
 
374
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
374
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
375
375
  return this.sink.onFailure(cause)
376
376
  }
377
377
 
@@ -386,25 +386,25 @@ class LoopSink<R, E, A, B, C> implements Sink<R, E, A> {
386
386
  * @since 1.20.0
387
387
  */
388
388
  export const loopCause: {
389
- <B, A, C>(seed: B, f: (acc: B, a: Cause.Cause<A>) => readonly [Cause.Cause<C>, B]): <R, E>(
390
- sink: Sink<R, C, A>
391
- ) => Sink<R, E, A>
392
- <R, E, A, B, C>(
393
- sink: Sink<R, C, A>,
389
+ <B, A, C>(seed: B, f: (acc: B, a: Cause.Cause<A>) => readonly [Cause.Cause<C>, B]): <E, R>(
390
+ sink: Sink<A, C, R>
391
+ ) => Sink<A, E, R>
392
+ <A, E, R, B, C>(
393
+ sink: Sink<A, C, R>,
394
394
  seed: B,
395
395
  f: (acc: B, a: Cause.Cause<E>) => readonly [Cause.Cause<C>, B]
396
- ): Sink<R, E, A>
397
- } = dual(3, function loopCause<R, E, A, B, C>(
398
- sink: Sink<R, C, A>,
396
+ ): Sink<A, E, R>
397
+ } = dual(3, function loopCause<A, E, R, B, C>(
398
+ sink: Sink<A, C, R>,
399
399
  seed: B,
400
400
  f: (acc: B, a: Cause.Cause<E>) => readonly [Cause.Cause<C>, B]
401
- ): Sink<R, E, A> {
401
+ ): Sink<A, E, R> {
402
402
  return new LoopCauseSink(sink, seed, f)
403
403
  })
404
404
 
405
- class LoopCauseSink<R, E, A, B, C> implements Sink<R, E, A> {
405
+ class LoopCauseSink<A, E, R, B, C> implements Sink<A, E, R> {
406
406
  constructor(
407
- readonly sink: Sink<R, C, A>,
407
+ readonly sink: Sink<A, C, R>,
408
408
  private seed: B,
409
409
  readonly f: (acc: B, a: Cause.Cause<E>) => readonly [Cause.Cause<C>, B]
410
410
  ) {
@@ -412,7 +412,7 @@ class LoopCauseSink<R, E, A, B, C> implements Sink<R, E, A> {
412
412
  this.onSuccess = this.onSuccess.bind(this)
413
413
  }
414
414
 
415
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
415
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
416
416
  const [c, acc] = this.f(this.seed, cause)
417
417
  this.seed = acc
418
418
  return this.sink.onFailure(c)
@@ -427,21 +427,21 @@ class LoopCauseSink<R, E, A, B, C> implements Sink<R, E, A> {
427
427
  * @since 1.20.0
428
428
  */
429
429
  export const filterMapLoop: {
430
- <B, A, C>(seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): <R, E>(
431
- sink: Sink<R, E, C>
432
- ) => Sink<R, E, A>
433
- <R, E, A, B, C>(sink: Sink<R, E, C>, seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): Sink<R, E, A>
434
- } = dual(3, function filterMapLoop<R, E, A, B, C>(
435
- sink: Sink<R, E, C>,
430
+ <B, A, C>(seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): <E, R>(
431
+ sink: Sink<C, E, R>
432
+ ) => Sink<A, E, R>
433
+ <A, E, R, B, C>(sink: Sink<C, E, R>, seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): Sink<A, E, R>
434
+ } = dual(3, function filterMapLoop<A, E, R, B, C>(
435
+ sink: Sink<C, E, R>,
436
436
  seed: B,
437
437
  f: (acc: B, a: A) => readonly [Option.Option<C>, B]
438
- ): Sink<R, E, A> {
438
+ ): Sink<A, E, R> {
439
439
  return new FilterMapLoopSink(sink, seed, f)
440
440
  })
441
441
 
442
- class FilterMapLoopSink<R, E, A, B, C> implements Sink<R, E, A> {
442
+ class FilterMapLoopSink<A, E, R, B, C> implements Sink<A, E, R> {
443
443
  constructor(
444
- readonly sink: Sink<R, E, C>,
444
+ readonly sink: Sink<C, E, R>,
445
445
  private seed: B,
446
446
  readonly f: (acc: B, a: A) => readonly [Option.Option<C>, B]
447
447
  ) {
@@ -449,7 +449,7 @@ class FilterMapLoopSink<R, E, A, B, C> implements Sink<R, E, A> {
449
449
  this.onSuccess = this.onSuccess.bind(this)
450
450
  }
451
451
 
452
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
452
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
453
453
  return this.sink.onFailure(cause)
454
454
  }
455
455
 
@@ -465,25 +465,25 @@ class FilterMapLoopSink<R, E, A, B, C> implements Sink<R, E, A> {
465
465
  * @since 1.20.0
466
466
  */
467
467
  export const filterMapLoopCause: {
468
- <B, A, C>(seed: B, f: (acc: B, a: Cause.Cause<A>) => readonly [Option.Option<Cause.Cause<C>>, B]): <R, E>(
469
- sink: Sink<R, C, A>
470
- ) => Sink<R, E, A>
471
- <R, E, A, B, C>(
472
- sink: Sink<R, C, A>,
468
+ <B, A, C>(seed: B, f: (acc: B, a: Cause.Cause<A>) => readonly [Option.Option<Cause.Cause<C>>, B]): <E, R>(
469
+ sink: Sink<A, C, R>
470
+ ) => Sink<A, E, R>
471
+ <A, E, R, B, C>(
472
+ sink: Sink<A, C, R>,
473
473
  seed: B,
474
474
  f: (acc: B, a: Cause.Cause<E>) => readonly [Option.Option<Cause.Cause<C>>, B]
475
- ): Sink<R, E, A>
476
- } = dual(3, function filterMapLoopCause<R, E, A, B, C>(
477
- sink: Sink<R, C, A>,
475
+ ): Sink<A, E, R>
476
+ } = dual(3, function filterMapLoopCause<A, E, R, B, C>(
477
+ sink: Sink<A, C, R>,
478
478
  seed: B,
479
479
  f: (acc: B, a: Cause.Cause<E>) => readonly [Option.Option<Cause.Cause<C>>, B]
480
- ): Sink<R, E, A> {
480
+ ): Sink<A, E, R> {
481
481
  return new FilterMapLoopCauseSink(sink, seed, f)
482
482
  })
483
483
 
484
- class FilterMapLoopCauseSink<R, E, A, B, C> implements Sink<R, E, A> {
484
+ class FilterMapLoopCauseSink<A, E, R, B, C> implements Sink<A, E, R> {
485
485
  constructor(
486
- readonly sink: Sink<R, C, A>,
486
+ readonly sink: Sink<A, C, R>,
487
487
  private seed: B,
488
488
  readonly f: (acc: B, a: Cause.Cause<E>) => readonly [Option.Option<Cause.Cause<C>>, B]
489
489
  ) {
@@ -491,7 +491,7 @@ class FilterMapLoopCauseSink<R, E, A, B, C> implements Sink<R, E, A> {
491
491
  this.onSuccess = this.onSuccess.bind(this)
492
492
  }
493
493
 
494
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
494
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
495
495
  const [option, acc] = this.f(this.seed, cause)
496
496
  this.seed = acc
497
497
  if (Option.isSome(option)) return this.sink.onFailure(option.value)
@@ -507,33 +507,33 @@ class FilterMapLoopCauseSink<R, E, A, B, C> implements Sink<R, E, A> {
507
507
  * @since 1.20.0
508
508
  */
509
509
  export const loopEffect: {
510
- <B, A, R2, E2, C>(seed: B, f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>): <R, E>(
511
- sink: Sink<R, E, C>
512
- ) => Sink<R | R2, E | E2, A>
513
- <R, E, A, B, C>(
514
- sink: Sink<R, E, C>,
510
+ <B, A, E2, R2, C>(seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [C, B], E2, R2>): <E, R>(
511
+ sink: Sink<C, E, R>
512
+ ) => Sink<A, E | E2, R | R2>
513
+ <A, E, R, B, C>(
514
+ sink: Sink<C, E, R>,
515
515
  seed: B,
516
- f: (acc: B, a: A) => Effect.Effect<R, E, readonly [C, B]>
517
- ): Sink<R, E, A>
518
- } = dual(3, function loopEffect<R, E, A, B, C>(
519
- sink: Sink<R, E, C>,
516
+ f: (acc: B, a: A) => Effect.Effect<readonly [C, B], E, R>
517
+ ): Sink<A, E, R>
518
+ } = dual(3, function loopEffect<A, E, R, B, C>(
519
+ sink: Sink<C, E, R>,
520
520
  seed: B,
521
- f: (acc: B, a: A) => Effect.Effect<R, E, readonly [C, B]>
522
- ): Sink<R, E, A> {
521
+ f: (acc: B, a: A) => Effect.Effect<readonly [C, B], E, R>
522
+ ): Sink<A, E, R> {
523
523
  return new LoopEffectSink(sink, seed, f)
524
524
  })
525
525
 
526
- class LoopEffectSink<R, E, A, B, C> implements Sink<R, E, A> {
526
+ class LoopEffectSink<A, E, R, B, C> implements Sink<A, E, R> {
527
527
  constructor(
528
- readonly sink: Sink<R, E, C>,
528
+ readonly sink: Sink<C, E, R>,
529
529
  private seed: B,
530
- readonly f: (acc: B, a: A) => Effect.Effect<R, E, readonly [C, B]>
530
+ readonly f: (acc: B, a: A) => Effect.Effect<readonly [C, B], E, R>
531
531
  ) {
532
532
  this.onFailure = this.onFailure.bind(this)
533
533
  this.onSuccess = this.onSuccess.bind(this)
534
534
  }
535
535
 
536
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
536
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
537
537
  return this.sink.onFailure(cause)
538
538
  }
539
539
 
@@ -552,33 +552,33 @@ class LoopEffectSink<R, E, A, B, C> implements Sink<R, E, A> {
552
552
  * @since 1.20.0
553
553
  */
554
554
  export const filterMapLoopEffect: {
555
- <B, A, R2, E2, C>(seed: B, f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [Option.Option<C>, B]>): <R, E>(
556
- sink: Sink<R, E, C>
557
- ) => Sink<R | R2, E | E2, A>
558
- <R, E, A, B, R2, C>(
559
- sink: Sink<R, E, C>,
555
+ <B, A, E2, R2, C>(seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [Option.Option<C>, B], E2, R2>): <E, R>(
556
+ sink: Sink<C, E, R>
557
+ ) => Sink<A, E | E2, R | R2>
558
+ <A, E, R, B, R2, C>(
559
+ sink: Sink<C, E, R>,
560
560
  seed: B,
561
- f: (acc: B, a: A) => Effect.Effect<R2, E, readonly [Option.Option<C>, B]>
562
- ): Sink<R | R2, E, A>
563
- } = dual(3, function filterMapLoopEffect<R, E, A, B, R2, C>(
564
- sink: Sink<R, E, C>,
561
+ f: (acc: B, a: A) => Effect.Effect<readonly [Option.Option<C>, B], E, R2>
562
+ ): Sink<A, E, R | R2>
563
+ } = dual(3, function filterMapLoopEffect<A, E, R, B, R2, C>(
564
+ sink: Sink<C, E, R>,
565
565
  seed: B,
566
- f: (acc: B, a: A) => Effect.Effect<R2, E, readonly [Option.Option<C>, B]>
567
- ): Sink<R | R2, E, A> {
566
+ f: (acc: B, a: A) => Effect.Effect<readonly [Option.Option<C>, B], E, R2>
567
+ ): Sink<A, E, R | R2> {
568
568
  return new FilterMapLoopEffectSink(sink, seed, f)
569
569
  })
570
570
 
571
- class FilterMapLoopEffectSink<R, E, A, B, R2, C> implements Sink<R | R2, E, A> {
571
+ class FilterMapLoopEffectSink<A, E, R, B, R2, C> implements Sink<A, E, R | R2> {
572
572
  constructor(
573
- readonly sink: Sink<R, E, C>,
573
+ readonly sink: Sink<C, E, R>,
574
574
  private seed: B,
575
- readonly f: (acc: B, a: A) => Effect.Effect<R2, E, readonly [Option.Option<C>, B]>
575
+ readonly f: (acc: B, a: A) => Effect.Effect<readonly [Option.Option<C>, B], E, R2>
576
576
  ) {
577
577
  this.onFailure = this.onFailure.bind(this)
578
578
  this.onSuccess = this.onSuccess.bind(this)
579
579
  }
580
580
 
581
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
581
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
582
582
  return this.sink.onFailure(cause)
583
583
  }
584
584
 
@@ -598,36 +598,36 @@ class FilterMapLoopEffectSink<R, E, A, B, R2, C> implements Sink<R | R2, E, A> {
598
598
  * @since 1.20.0
599
599
  */
600
600
  export const loopCauseEffect: {
601
- <B, A, R2, E2, C>(
601
+ <B, A, E2, R2, C>(
602
602
  seed: B,
603
- f: (acc: B, a: Cause.Cause<A>) => Effect.Effect<R2, E2, readonly [Cause.Cause<C>, B]>
604
- ): <R, E>(
605
- sink: Sink<R, E | C, A>
606
- ) => Sink<R, E | C, A>
607
- <R, E, A, B, C>(
608
- sink: Sink<R, E | C, A>,
603
+ f: (acc: B, a: Cause.Cause<A>) => Effect.Effect<readonly [Cause.Cause<C>, B], E2, R2>
604
+ ): <E, R>(
605
+ sink: Sink<A, E | C, R>
606
+ ) => Sink<A, E | C, R>
607
+ <A, E, R, B, C>(
608
+ sink: Sink<A, E | C, R>,
609
609
  seed: B,
610
- f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<R, E, readonly [Cause.Cause<C>, B]>
611
- ): Sink<R, E | C, A>
612
- } = dual(3, function loopCauseEffect<R, E, A, B, C>(
613
- sink: Sink<R, E | C, A>,
610
+ f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Cause.Cause<C>, B], E, R>
611
+ ): Sink<A, E | C, R>
612
+ } = dual(3, function loopCauseEffect<A, E, R, B, C>(
613
+ sink: Sink<A, E | C, R>,
614
614
  seed: B,
615
- f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<R, E, readonly [Cause.Cause<C>, B]>
616
- ): Sink<R, E | C, A> {
615
+ f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Cause.Cause<C>, B], E, R>
616
+ ): Sink<A, E | C, R> {
617
617
  return new LoopCauseEffectSink(sink, seed, f)
618
618
  })
619
619
 
620
- class LoopCauseEffectSink<R, E, A, B, C> implements Sink<R, E, A> {
620
+ class LoopCauseEffectSink<A, E, R, B, C> implements Sink<A, E, R> {
621
621
  constructor(
622
- readonly sink: Sink<R, E | C, A>,
622
+ readonly sink: Sink<A, E | C, R>,
623
623
  private seed: B,
624
- readonly f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<R, E, readonly [Cause.Cause<C>, B]>
624
+ readonly f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Cause.Cause<C>, B], E, R>
625
625
  ) {
626
626
  this.onFailure = this.onFailure.bind(this)
627
627
  this.onSuccess = this.onSuccess.bind(this)
628
628
  }
629
629
 
630
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
630
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
631
631
  return Effect.matchCauseEffect(this.f(this.seed, cause), {
632
632
  onFailure: (cause2) => this.sink.onFailure(Cause.sequential(cause, cause2)),
633
633
  onSuccess: ([c, acc]) => {
@@ -645,25 +645,25 @@ class LoopCauseEffectSink<R, E, A, B, C> implements Sink<R, E, A> {
645
645
  /**
646
646
  * @since 1.20.0
647
647
  */
648
- export function filterMapLoopCauseEffect<R, E, A, B, R2, E2, C>(
649
- sink: Sink<R, E2 | C, A>,
648
+ export function filterMapLoopCauseEffect<A, E, R, B, E2, R2, C>(
649
+ sink: Sink<A, E2 | C, R>,
650
650
  seed: B,
651
- f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<R2, E2, readonly [Option.Option<Cause.Cause<C>>, B]>
652
- ): Sink<R | R2, E, A> {
651
+ f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Option.Option<Cause.Cause<C>>, B], E2, R2>
652
+ ): Sink<A, E, R | R2> {
653
653
  return new FilterMapLoopCauseEffectSink(sink, seed, f)
654
654
  }
655
655
 
656
- class FilterMapLoopCauseEffectSink<R, E, A, B, R2, E2, C> implements Sink<R | R2, E, A> {
656
+ class FilterMapLoopCauseEffectSink<A, E, R, B, E2, R2, C> implements Sink<A, E, R | R2> {
657
657
  constructor(
658
- readonly sink: Sink<R, E2 | C, A>,
658
+ readonly sink: Sink<A, E2 | C, R>,
659
659
  private seed: B,
660
- readonly f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<R2, E2, readonly [Option.Option<Cause.Cause<C>>, B]>
660
+ readonly f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Option.Option<Cause.Cause<C>>, B], E2, R2>
661
661
  ) {
662
662
  this.onFailure = this.onFailure.bind(this)
663
663
  this.onSuccess = this.onSuccess.bind(this)
664
664
  }
665
665
 
666
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R | R2, never, unknown> {
666
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R | R2> {
667
667
  return Effect.matchCauseEffect(this.f(this.seed, cause), {
668
668
  onFailure: (cause2) => this.sink.onFailure(cause2),
669
669
  onSuccess: ([option, acc]) => {
@@ -683,28 +683,28 @@ class FilterMapLoopCauseEffectSink<R, E, A, B, R2, E2, C> implements Sink<R | R2
683
683
  * @since 1.20.0
684
684
  */
685
685
  export const slice: {
686
- <R, E, A, R2>(bounds: Bounds, f: (sink: Sink<R, E, A>) => Effect.Effect<R2, never, unknown>): (
687
- sink: Sink<R, E, A>
688
- ) => Effect.Effect<R | R2, never, void>
689
- <R, E, A, R2>(
690
- sink: Sink<R, E, A>,
686
+ <A, E, R, R2>(bounds: Bounds, f: (sink: Sink<A, E, R>) => Effect.Effect<unknown, never, R2>): (
687
+ sink: Sink<A, E, R>
688
+ ) => Effect.Effect<void, never, R | R2>
689
+ <A, E, R, R2>(
690
+ sink: Sink<A, E, R>,
691
691
  bounds: Bounds,
692
- f: (sink: Sink<R, E, A>) => Effect.Effect<R2, never, unknown>
693
- ): Effect.Effect<R | R2, never, void>
694
- } = dual(3, function slice<R, E, A, R2>(
695
- sink: Sink<R, E, A>,
692
+ f: (sink: Sink<A, E, R>) => Effect.Effect<unknown, never, R2>
693
+ ): Effect.Effect<void, never, R | R2>
694
+ } = dual(3, function slice<A, E, R, R2>(
695
+ sink: Sink<A, E, R>,
696
696
  bounds: Bounds,
697
- f: (sink: Sink<R, E, A>) => Effect.Effect<R2, never, unknown>
698
- ): Effect.Effect<R | R2, never, void> {
697
+ f: (sink: Sink<A, E, R>) => Effect.Effect<unknown, never, R2>
698
+ ): Effect.Effect<void, never, R | R2> {
699
699
  return withEarlyExit(sink, (s) => f(new SliceSink(s, bounds)))
700
700
  })
701
701
 
702
- class SliceSink<R, E, A> implements Sink<R, E, A> {
702
+ class SliceSink<A, E, R> implements Sink<A, E, R> {
703
703
  private drop: number
704
704
  private take: number
705
705
 
706
706
  constructor(
707
- readonly sink: WithEarlyExit<R, E, A>,
707
+ readonly sink: WithEarlyExit<A, E, R>,
708
708
  readonly bounds: Bounds
709
709
  ) {
710
710
  this.drop = this.bounds.min
@@ -714,7 +714,7 @@ class SliceSink<R, E, A> implements Sink<R, E, A> {
714
714
  this.onSuccess = this.onSuccess.bind(this)
715
715
  }
716
716
 
717
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
717
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
718
718
  return this.sink.onFailure(cause)
719
719
  }
720
720
 
@@ -734,27 +734,27 @@ class SliceSink<R, E, A> implements Sink<R, E, A> {
734
734
  * @since 1.20.0
735
735
  */
736
736
  export const takeWhile: {
737
- <R, E, A, R2, B>(predicate: Predicate.Predicate<A>, f: (sink: Sink<R, E, A>) => Effect.Effect<R2, E, B>): (
738
- sink: Sink<R, E, A>
739
- ) => Effect.Effect<R | R2, never, void>
740
- <R, E, A, R2, B>(
741
- sink: Sink<R, E, A>,
737
+ <A, E, R, B, R2>(predicate: Predicate.Predicate<A>, f: (sink: Sink<A, E, R>) => Effect.Effect<B, E, R2>): (
738
+ sink: Sink<A, E, R>
739
+ ) => Effect.Effect<void, never, R | R2>
740
+ <A, E, R, B, R2>(
741
+ sink: Sink<A, E, R>,
742
742
  predicate: Predicate.Predicate<A>,
743
- f: (sink: Sink<R, E, A>) => Effect.Effect<R2, E, B>
744
- ): Effect.Effect<R | R2, never, void>
745
- } = dual(3, function takeWhile<R, E, A, R2, B>(
746
- sink: Sink<R, E, A>,
743
+ f: (sink: Sink<A, E, R>) => Effect.Effect<B, E, R2>
744
+ ): Effect.Effect<void, never, R | R2>
745
+ } = dual(3, function takeWhile<A, E, R, B, R2>(
746
+ sink: Sink<A, E, R>,
747
747
  predicate: Predicate.Predicate<A>,
748
- f: (sink: Sink<R, E, A>) => Effect.Effect<R2, E, B>
748
+ f: (sink: Sink<A, E, R>) => Effect.Effect<B, E, R2>
749
749
  ) {
750
750
  return withEarlyExit(sink, (s) => f(new TakeWhileSink(s, predicate)))
751
751
  })
752
752
 
753
- class TakeWhileSink<R, E, A> implements Sink<R, E, A> {
753
+ class TakeWhileSink<A, E, R> implements Sink<A, E, R> {
754
754
  private take: boolean
755
755
 
756
756
  constructor(
757
- readonly sink: WithEarlyExit<R, E, A>,
757
+ readonly sink: WithEarlyExit<A, E, R>,
758
758
  readonly predicate: Predicate.Predicate<A>
759
759
  ) {
760
760
  this.take = true
@@ -762,7 +762,7 @@ class TakeWhileSink<R, E, A> implements Sink<R, E, A> {
762
762
  this.onSuccess = this.onSuccess.bind(this)
763
763
  }
764
764
 
765
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
765
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
766
766
  return this.sink.onFailure(cause)
767
767
  }
768
768
 
@@ -779,14 +779,14 @@ class TakeWhileSink<R, E, A> implements Sink<R, E, A> {
779
779
  * @since 1.20.0
780
780
  */
781
781
  export const dropWhile: {
782
- <A>(predicate: Predicate.Predicate<A>): <R, E>(
783
- sink: Sink<R, E, A>
784
- ) => Sink<R, E, A>
785
- <R, E, A>(sink: Sink<R, E, A>, predicate: Predicate.Predicate<A>): Sink<R, E, A>
786
- } = dual(2, function dropWhile<R, E, A>(
787
- sink: Sink<R, E, A>,
782
+ <A>(predicate: Predicate.Predicate<A>): <E, R>(
783
+ sink: Sink<A, E, R>
784
+ ) => Sink<A, E, R>
785
+ <A, E, R>(sink: Sink<A, E, R>, predicate: Predicate.Predicate<A>): Sink<A, E, R>
786
+ } = dual(2, function dropWhile<A, E, R>(
787
+ sink: Sink<A, E, R>,
788
788
  predicate: Predicate.Predicate<A>
789
- ): Sink<R, E, A> {
789
+ ): Sink<A, E, R> {
790
790
  return filterMapLoop(sink, true, (drop: boolean, a: A) => {
791
791
  const drop2 = drop && predicate(a)
792
792
  return [drop2 ? Option.none() : Option.some(a), drop2]
@@ -797,12 +797,12 @@ export const dropWhile: {
797
797
  * @since 1.20.0
798
798
  */
799
799
  export const dropAfter: {
800
- <A>(predicate: Predicate.Predicate<A>): <R, E>(
801
- sink: Sink<R, E, A>
802
- ) => Sink<R, E, A>
803
- <R, E, A>(sink: Sink<R, E, A>, predicate: Predicate.Predicate<A>): Sink<R, E, A>
804
- } = dual(2, function dropAfter<R, E, A>(
805
- sink: Sink<R, E, A>,
800
+ <A>(predicate: Predicate.Predicate<A>): <E, R>(
801
+ sink: Sink<A, E, R>
802
+ ) => Sink<A, E, R>
803
+ <A, E, R>(sink: Sink<A, E, R>, predicate: Predicate.Predicate<A>): Sink<A, E, R>
804
+ } = dual(2, function dropAfter<A, E, R>(
805
+ sink: Sink<A, E, R>,
806
806
  predicate: Predicate.Predicate<A>
807
807
  ) {
808
808
  return filterMapLoop(sink, false, (drop: boolean, a: A) => {
@@ -817,38 +817,38 @@ export const dropAfter: {
817
817
  * @since 1.20.0
818
818
  */
819
819
  export const takeWhileEffect: {
820
- <R, E, A, R2, E2, R3, E3, B>(
821
- predicate: (a: A) => Effect.Effect<R2, E2, boolean>,
822
- f: (sink: Sink<R | R2, E, A>) => Effect.Effect<R3, E3, B>
823
- ): <R, E>(
824
- sink: Sink<R, E, A>
825
- ) => Effect.Effect<R | R3, never, void>
826
- <R, E, A, R2, E2, R3, E3, B>(
827
- sink: Sink<R, E | E2 | E3, A>,
828
- predicate: (a: A) => Effect.Effect<R2, E2, boolean>,
829
- f: (sink: Sink<R | R2, E, A>) => Effect.Effect<R3, E3, B>
830
- ): Effect.Effect<R | R3, never, void>
831
- } = dual(3, function takeWhileEffect<R, E, A, R2, E2, R3, E3, B>(
832
- sink: Sink<R, E | E2 | E3, A>,
833
- predicate: (a: A) => Effect.Effect<R2, E2, boolean>,
834
- f: (sink: Sink<R | R2, E, A>) => Effect.Effect<R3, E3, B>
820
+ <A, E, R, E2, R2, R3, E3, B>(
821
+ predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
822
+ f: (sink: Sink<A, E, R | R2>) => Effect.Effect<B, E3, R3>
823
+ ): <E, R>(
824
+ sink: Sink<A, E, R>
825
+ ) => Effect.Effect<void, never, R | R3>
826
+ <A, E, R, E2, R2, R3, E3, B>(
827
+ sink: Sink<A, E | E2 | E3, R>,
828
+ predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
829
+ f: (sink: Sink<A, E, R | R2>) => Effect.Effect<B, E3, R3>
830
+ ): Effect.Effect<void, never, R | R3>
831
+ } = dual(3, function takeWhileEffect<A, E, R, E2, R2, R3, E3, B>(
832
+ sink: Sink<A, E | E2 | E3, R>,
833
+ predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
834
+ f: (sink: Sink<A, E, R | R2>) => Effect.Effect<B, E3, R3>
835
835
  ) {
836
836
  return withEarlyExit(sink, (s) => f(new TakeWhileEffectSink(s, predicate)))
837
837
  })
838
838
 
839
- class TakeWhileEffectSink<R, E, A, R2, E2> implements Sink<R | R2, E, A> {
839
+ class TakeWhileEffectSink<A, E, R, E2, R2> implements Sink<A, E, R | R2> {
840
840
  private take: boolean
841
841
 
842
842
  constructor(
843
- readonly sink: WithEarlyExit<R, E | E2, A>,
844
- readonly predicate: (a: A) => Effect.Effect<R2, E2, boolean>
843
+ readonly sink: WithEarlyExit<A, E | E2, R>,
844
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
845
845
  ) {
846
846
  this.take = true
847
847
  this.onFailure = this.onFailure.bind(this)
848
848
  this.onSuccess = this.onSuccess.bind(this)
849
849
  }
850
850
 
851
- onFailure(cause: Cause.Cause<E | E2>): Effect.Effect<R | R2, never, unknown> {
851
+ onFailure(cause: Cause.Cause<E | E2>): Effect.Effect<unknown, never, R | R2> {
852
852
  return this.sink.onFailure(cause)
853
853
  }
854
854
 
@@ -869,18 +869,18 @@ class TakeWhileEffectSink<R, E, A, R2, E2> implements Sink<R | R2, E, A> {
869
869
  * @since 1.20.0
870
870
  */
871
871
  export const dropWhileEffect: {
872
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(
873
- sink: Sink<R, E | E2, A>
874
- ) => Sink<R | R2, E | E2, A>
875
- <R, E, A, R2, E2>(
876
- sink: Sink<R, E | E2, A>,
877
- predicate: (a: A) => Effect.Effect<R2, E2, boolean>
878
- ): Sink<R | R2, E | E2, A>
879
- } = dual(2, function dropWhileEffect<R, E, A, R2, E2>(
880
- sink: Sink<R, E | E2, A>,
881
- predicate: (a: A) => Effect.Effect<R2, E2, boolean>
882
- ): Sink<R | R2, E | E2, A> {
883
- return filterMapLoopEffect<R, E | E2, A, boolean, R2, A>(sink, true, (drop: boolean, a: A) => {
872
+ <A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(
873
+ sink: Sink<A, E | E2, R>
874
+ ) => Sink<A, E | E2, R | R2>
875
+ <A, E, R, E2, R2>(
876
+ sink: Sink<A, E | E2, R>,
877
+ predicate: (a: A) => Effect.Effect<boolean, E2, R2>
878
+ ): Sink<A, E | E2, R | R2>
879
+ } = dual(2, function dropWhileEffect<A, E, R, E2, R2>(
880
+ sink: Sink<A, E | E2, R>,
881
+ predicate: (a: A) => Effect.Effect<boolean, E2, R2>
882
+ ): Sink<A, E | E2, R | R2> {
883
+ return filterMapLoopEffect<A, E | E2, R, boolean, R2, A>(sink, true, (drop: boolean, a: A) => {
884
884
  if (drop === false) return Effect.succeed([Option.some(a), drop as boolean] as const)
885
885
 
886
886
  return Effect.map(predicate(a), (b) => [b ? Option.none<A>() : Option.some(a), b] as const)
@@ -891,18 +891,18 @@ export const dropWhileEffect: {
891
891
  * @since 1.20.0
892
892
  */
893
893
  export const dropAfterEffect: {
894
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(
895
- sink: Sink<R, E | E2, A>
896
- ) => Sink<R | R2, E | E2, A>
897
- <R, E, A, R2, E2>(
898
- sink: Sink<R, E | E2, A>,
899
- predicate: (a: A) => Effect.Effect<R2, E2, boolean>
900
- ): Sink<R | R2, E | E2, A>
901
- } = dual(2, function dropAfterEffect<R, E, A, R2, E2>(
902
- sink: Sink<R, E | E2, A>,
903
- predicate: (a: A) => Effect.Effect<R2, E2, boolean>
904
- ): Sink<R | R2, E | E2, A> {
905
- return filterMapLoopEffect<R, E | E2, A, boolean, R2, A>(sink, false, (drop: boolean, a: A) => {
894
+ <A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(
895
+ sink: Sink<A, E | E2, R>
896
+ ) => Sink<A, E | E2, R | R2>
897
+ <A, E, R, E2, R2>(
898
+ sink: Sink<A, E | E2, R>,
899
+ predicate: (a: A) => Effect.Effect<boolean, E2, R2>
900
+ ): Sink<A, E | E2, R | R2>
901
+ } = dual(2, function dropAfterEffect<A, E, R, E2, R2>(
902
+ sink: Sink<A, E | E2, R>,
903
+ predicate: (a: A) => Effect.Effect<boolean, E2, R2>
904
+ ): Sink<A, E | E2, R | R2> {
905
+ return filterMapLoopEffect<A, E | E2, R, boolean, R2, A>(sink, false, (drop: boolean, a: A) => {
906
906
  if (drop === true) return Effect.succeed([Option.none(), drop as boolean] as const)
907
907
 
908
908
  return Effect.map(predicate(a), (b) => [Option.some(a), b] as const)
@@ -913,12 +913,12 @@ export const dropAfterEffect: {
913
913
  * @since 1.20.0
914
914
  */
915
915
  export const provide: {
916
- <R2>(ctx: C.Context<R2>): <R, E, A>(sink: Sink<R, E, A>) => Sink<Exclude<R, R2>, E, A>
917
- <R, E, A, R2>(sink: Sink<R, E, A>, ctx: C.Context<R2>): Sink<Exclude<R, R2>, E, A>
918
- } = dual(2, function provide<R, E, A, R2>(
919
- sink: Sink<R, E, A>,
916
+ <R2>(ctx: C.Context<R2>): <A, E, R>(sink: Sink<A, E, R>) => Sink<A, E, Exclude<R, R2>>
917
+ <A, E, R, R2>(sink: Sink<A, E, R>, ctx: C.Context<R2>): Sink<A, E, Exclude<R, R2>>
918
+ } = dual(2, function provide<A, E, R, R2>(
919
+ sink: Sink<A, E, R>,
920
920
  ctx: C.Context<R2>
921
- ): Sink<Exclude<R, R2>, E, A> {
921
+ ): Sink<A, E, Exclude<R, R2>> {
922
922
  return make(
923
923
  (cause) => Effect.provide(sink.onFailure(cause), ctx),
924
924
  (a) => Effect.provide(sink.onSuccess(a), ctx)
@@ -929,12 +929,12 @@ export const provide: {
929
929
  * @since 1.20.0
930
930
  */
931
931
  export const setSpan: {
932
- (span: Tracer.Span): <R, E, A>(sink: Sink<R, E, A>) => Sink<R, E, A>
933
- <R, E, A>(self: Sink<R, E, A>, span: Tracer.Span): Sink<R, E, A>
934
- } = dual(2, function setSpan<R, E, A>(
935
- self: Sink<R, E, A>,
932
+ (span: Tracer.Span): <A, E, R>(sink: Sink<A, E, R>) => Sink<A, E, R>
933
+ <A, E, R>(self: Sink<A, E, R>, span: Tracer.Span): Sink<A, E, R>
934
+ } = dual(2, function setSpan<A, E, R>(
935
+ self: Sink<A, E, R>,
936
936
  span: Tracer.Span
937
- ): Sink<R, E, A> {
937
+ ): Sink<A, E, R> {
938
938
  return make(
939
939
  (cause) =>
940
940
  addEvent(self.onFailure(cause), "fx.failure", span, {
@@ -947,12 +947,12 @@ export const setSpan: {
947
947
  )
948
948
  })
949
949
 
950
- const addEvent = <R, E, A>(
951
- effect: Effect.Effect<R, E, A>,
950
+ const addEvent = <A, E, R>(
951
+ effect: Effect.Effect<A, E, R>,
952
952
  name: string,
953
953
  span: Tracer.Span,
954
954
  attributes: Record<string, unknown>
955
- ): Effect.Effect<R, E, A> =>
955
+ ): Effect.Effect<A, E, R> =>
956
956
  Effect.flatMap(Clock.currentTimeNanos, (time) =>
957
957
  Effect.suspend(() => {
958
958
  span.event(name, time, attributes)
@@ -964,24 +964,24 @@ const addEvent = <R, E, A>(
964
964
  * @since 1.20.0
965
965
  */
966
966
  export function tagged<E, A>(): {
967
- <const I extends C.IdentifierFactory<any>>(identifier: I): Sink.Tagged<C.IdentifierOf<I>, E, A>
968
- <const I>(identifier: I): Sink.Tagged<C.IdentifierOf<I>, E, A>
967
+ <const I extends C.IdentifierFactory<any>>(identifier: I): Sink.Tagged<A, E, C.IdentifierOf<I>>
968
+ <const I>(identifier: I): Sink.Tagged<A, E, C.IdentifierOf<I>>
969
969
  } {
970
- return <const I>(identifier: I) => new TaggedImpl(C.Tagged<I, Sink<never, E, A>>(identifier))
970
+ return <const I>(identifier: I) => new TaggedImpl(C.Tagged<I, Sink<A, E>>(identifier))
971
971
  }
972
972
 
973
- class TaggedImpl<I, E, A> implements Sink.Tagged<I, E, A> {
974
- constructor(readonly tag: C.Tagged<I, Sink<never, E, A>>) {}
973
+ class TaggedImpl<A, E, I> implements Sink.Tagged<A, E, I> {
974
+ constructor(readonly tag: C.Tagged<I, Sink<A, E>>) {}
975
975
 
976
- onSuccess(value: A): Effect.Effect<I, never, unknown> {
976
+ onSuccess(value: A): Effect.Effect<unknown, never, I> {
977
977
  return this.tag.withEffect((sink) => sink.onSuccess(value))
978
978
  }
979
979
 
980
- onFailure(cause: Cause.Cause<E>): Effect.Effect<I, never, unknown> {
980
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, I> {
981
981
  return this.tag.withEffect((sink) => sink.onFailure(cause))
982
982
  }
983
983
 
984
- make: <R>(sink: Sink<R, E, A>) => Layer.Layer<R, never, I> = <R>(sink: Sink<R, E, A>) =>
984
+ make: <R>(sink: Sink<A, E, R>) => Layer.Layer<I, never, R> = <R>(sink: Sink<A, E, R>) =>
985
985
  Layer.flatMap(Layer.context<R>(), (ctx) => this.tag.layer(provide(sink, ctx)))
986
986
  }
987
987
 
@@ -989,27 +989,27 @@ class TaggedImpl<I, E, A> implements Sink.Tagged<I, E, A> {
989
989
  * @since 1.20.0
990
990
  */
991
991
  export const fromTag: {
992
- <S, R2, E2, B>(f: (s: S) => Sink<R2, E2, B>): <I>(tag: C.Tag<I, S>) => Sink<I | R2, E2, B>
993
- <I, S, R2, E2, B>(tag: C.Tag<I, S>, f: (s: S) => Sink<R2, E2, B>): Sink<I | R2, E2, B>
994
- } = dual(2, function fromTag<I, S, R2, E2, B>(
992
+ <S, B, E2, R2>(f: (s: S) => Sink<B, E2, R2>): <I>(tag: C.Tag<I, S>) => Sink<B, E2, I | R2>
993
+ <I, S, B, E2, R2>(tag: C.Tag<I, S>, f: (s: S) => Sink<B, E2, R2>): Sink<B, E2, I | R2>
994
+ } = dual(2, function fromTag<I, S, B, E2, R2>(
995
995
  tag: C.Tag<I, S>,
996
- f: (s: S) => Sink<R2, E2, B>
997
- ): Sink<I | R2, E2, B> {
996
+ f: (s: S) => Sink<B, E2, R2>
997
+ ): Sink<B, E2, I | R2> {
998
998
  return new FromTag(tag, f)
999
999
  })
1000
1000
 
1001
- class FromTag<I, S, R2, E2, B> implements Sink<I | R2, E2, B> {
1002
- readonly get: Effect.Effect<I, never, Sink<R2, E2, B>>
1001
+ class FromTag<I, S, B, E2, R2> implements Sink<B, E2, I | R2> {
1002
+ readonly get: Effect.Effect<Sink<B, E2, R2>, never, I>
1003
1003
 
1004
- constructor(readonly tag: C.Tag<I, S>, readonly f: (s: S) => Sink<R2, E2, B>) {
1004
+ constructor(readonly tag: C.Tag<I, S>, readonly f: (s: S) => Sink<B, E2, R2>) {
1005
1005
  this.get = Effect.map(tag, f)
1006
1006
  }
1007
1007
 
1008
- onSuccess(value: B): Effect.Effect<I | R2, never, unknown> {
1008
+ onSuccess(value: B): Effect.Effect<unknown, never, I | R2> {
1009
1009
  return Effect.flatMap(this.get, (sink) => sink.onSuccess(value))
1010
1010
  }
1011
1011
 
1012
- onFailure(cause: Cause.Cause<E2>): Effect.Effect<I | R2, never, unknown> {
1012
+ onFailure(cause: Cause.Cause<E2>): Effect.Effect<unknown, never, I | R2> {
1013
1013
  return Effect.flatMap(this.get, (sink) => sink.onFailure(cause))
1014
1014
  }
1015
1015
  }
@@ -1017,7 +1017,7 @@ class FromTag<I, S, R2, E2, B> implements Sink<I | R2, E2, B> {
1017
1017
  /**
1018
1018
  * @since 1.20.0
1019
1019
  */
1020
- export function ignoreInterrupt<R, E, A>(sink: Sink<R, E, A>): Sink<R, E, A> {
1020
+ export function ignoreInterrupt<A, E, R>(sink: Sink<A, E, R>): Sink<A, E, R> {
1021
1021
  return make(
1022
1022
  (cause) => Cause.isInterruptedOnly(cause) ? Effect.unit : sink.onFailure(cause),
1023
1023
  sink.onSuccess