@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/RefSubject.ts CHANGED
@@ -37,7 +37,9 @@ const UNBOUNDED = { concurrency: "unbounded" } as const
37
37
  * A Computed is essentially a readonly RefSubject.
38
38
  * @since 1.20.0
39
39
  */
40
- export interface Computed<out R, out E, out A> extends Versioned.Versioned<R, E, R | Scope.Scope, E, A, R, E, A> {
40
+ export interface Computed<out A, out E = never, out R = never>
41
+ extends Versioned.Versioned<R, E, A, E, R | Scope.Scope, A, E, R>
42
+ {
41
43
  readonly [ComputedTypeId]: ComputedTypeId
42
44
  }
43
45
 
@@ -59,15 +61,15 @@ export namespace Computed {
59
61
  * A Filtered is essentially a readonly RefSubject that may have its values filtered out.
60
62
  * @since 1.20.0
61
63
  */
62
- export interface Filtered<out R, out E, out A>
63
- extends Versioned.Versioned<R, E, R | Scope.Scope, E, A, R, E | Cause.NoSuchElementException, A>
64
+ export interface Filtered<out A, out E = never, out R = never>
65
+ extends Versioned.Versioned<R, E, A, E, R | Scope.Scope, A, E | Cause.NoSuchElementException, R>
64
66
  {
65
67
  readonly [FilteredTypeId]: FilteredTypeId
66
68
 
67
69
  /**
68
70
  * @since 1.20.0
69
71
  */
70
- asComputed(): Computed<R, E, Option.Option<A>>
72
+ asComputed(): Computed<Option.Option<A>, E, R>
71
73
  }
72
74
 
73
75
  /**
@@ -88,15 +90,17 @@ export namespace Filtered {
88
90
  * A RefSubject is a Subject that can be used to read and write a value.
89
91
  * @since 1.20.0
90
92
  */
91
- export interface RefSubject<out R, in out E, in out A> extends Computed<R, E, A>, Subject.Subject<R, E, A> {
93
+ export interface RefSubject<in out A, in out E = never, out R = never>
94
+ extends Computed<A, E, R>, Subject.Subject<A, E, R>
95
+ {
92
96
  readonly [RefSubjectTypeId]: RefSubjectTypeId
93
97
 
94
98
  /**
95
99
  * @since 1.20.0
96
100
  */
97
- readonly runUpdates: <R2, E2, B>(
98
- f: (ref: GetSetDelete<R, E, A>) => Effect.Effect<R2, E2, B>
99
- ) => Effect.Effect<R | R2, E2, B>
101
+ readonly runUpdates: <B, E2, R2>(
102
+ f: (ref: GetSetDelete<A, E, R>) => Effect.Effect<B, E2, R2>
103
+ ) => Effect.Effect<B, E2, R | R2>
100
104
  }
101
105
 
102
106
  /**
@@ -108,25 +112,25 @@ export namespace RefSubject {
108
112
  */
109
113
  export type Any =
110
114
  | RefSubject<any, any, any>
111
- | RefSubject<never, any, any>
115
+ | RefSubject<any, any>
112
116
  | RefSubject<any, never, any>
113
- | RefSubject<never, never, any>
117
+ | RefSubject<any>
114
118
 
115
119
  /**
116
120
  * @since 1.20.0
117
121
  */
118
- export interface Tagged<I, E, A> extends RefSubject<I, E, A> {
122
+ export interface Tagged<I, E, A> extends RefSubject<A, E, I> {
119
123
  /**
120
124
  * @since 1.20.0
121
125
  */
122
- readonly tag: C.Tagged<I, RefSubject<never, E, A>>
126
+ readonly tag: C.Tagged<I, RefSubject<A, E>>
123
127
  /**
124
128
  * @since 1.20.0
125
129
  */
126
130
  readonly make: <R>(
127
- fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>,
131
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R>,
128
132
  options?: RefSubjectOptions<A>
129
- ) => Layer.Layer<R, never, I>
133
+ ) => Layer.Layer<I, never, R>
130
134
  }
131
135
 
132
136
  /**
@@ -134,25 +138,25 @@ export namespace RefSubject {
134
138
  * @since 1.18.0
135
139
  * @category models
136
140
  */
137
- export interface Derived<R, E, A> extends RefSubject<R, E, A> {
138
- readonly persist: Effect.Effect<R, never, void>
141
+ export interface Derived<A, E, R> extends RefSubject<A, E, R> {
142
+ readonly persist: Effect.Effect<void, never, R>
139
143
  }
140
144
 
141
145
  /**
142
146
  * @since 1.20.0
143
147
  */
144
- export type Context<T> = T extends RefSubject<infer R, infer _E, infer _A> ? R : never
148
+ export type Context<T> = T extends RefSubject<infer _A, infer _E, infer R> ? R : never
145
149
 
146
150
  /**
147
151
  * @since 1.20.0
148
152
  */
149
153
 
150
- export type Error<T> = T extends RefSubject<infer _R, infer E, infer _A> ? E : never
154
+ export type Error<T> = T extends RefSubject<infer _A, infer E, infer _R> ? E : never
151
155
 
152
156
  /**
153
157
  * @since 1.20.0
154
158
  */
155
- export type Success<T> = T extends RefSubject<infer _R, infer _E, infer A> ? A : never
159
+ export type Success<T> = T extends RefSubject<infer A, infer _E, infer _R> ? A : never
156
160
 
157
161
  /**
158
162
  * @since 1.20.0
@@ -192,20 +196,20 @@ export interface RefSubjectOptions<A> {
192
196
  /**
193
197
  * @since 1.20.0
194
198
  */
195
- export function fromEffect<R, E, A>(
196
- effect: Effect.Effect<R, E, A>,
199
+ export function fromEffect<A, E, R>(
200
+ effect: Effect.Effect<A, E, R>,
197
201
  options?: RefSubjectOptions<A>
198
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A>> {
202
+ ): Effect.Effect<RefSubject<A, E>, never, R | Scope.Scope> {
199
203
  return Effect.map(makeCore(effect, options), (core) => new RefSubjectImpl(core))
200
204
  }
201
205
 
202
206
  /**
203
207
  * @since 1.20.0
204
208
  */
205
- export function fromFx<R, E, A>(
206
- fx: Fx<R, E, A>,
209
+ export function fromFx<A, E, R>(
210
+ fx: Fx<A, E, R>,
207
211
  options?: RefSubjectOptions<A>
208
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A>> {
212
+ ): Effect.Effect<RefSubject<A, E>, never, R | Scope.Scope> {
209
213
  return DeferredRef.make<E, A>(getExitEquivalence(options?.eq ?? Equal.equals)).pipe(
210
214
  Effect.bindTo("deferredRef"),
211
215
  Effect.bind("core", ({ deferredRef }) => makeCore(deferredRef, options)),
@@ -228,13 +232,13 @@ export function fromFx<R, E, A>(
228
232
  /**
229
233
  * @since 1.20.0
230
234
  */
231
- export function fromRefSubject<R, E, A>(
232
- ref: RefSubject<R, E, A>,
235
+ export function fromRefSubject<A, E, R>(
236
+ ref: RefSubject<A, E, R>,
233
237
  options?: RefSubjectOptions<A>
234
- ): Effect.Effect<R | Scope.Scope, never, RefSubject.Derived<never, E, A>> {
238
+ ): Effect.Effect<RefSubject.Derived<A, E, R>, never, R | Scope.Scope> {
235
239
  return DeferredRef.make<E, A>(getExitEquivalence(options?.eq ?? Equal.equals)).pipe(
236
240
  Effect.bindTo("deferredRef"),
237
- Effect.bind("core", ({ deferredRef }) => makeCore<R, E, A>(deferredRef, options)),
241
+ Effect.bind("core", ({ deferredRef }) => makeCore<A, E, R>(deferredRef, options)),
238
242
  Effect.tap(({ core, deferredRef }) =>
239
243
  Effect.forkIn(
240
244
  ref.run(Sink.make(
@@ -253,7 +257,7 @@ export function fromRefSubject<R, E, A>(
253
257
  )
254
258
  }
255
259
 
256
- function persistCore<R, E, A, R2>(ref: RefSubject<R, E, A>, core: RefSubjectCore<R, E, A, R2>) {
260
+ function persistCore<A, E, R, R2>(ref: RefSubject<A, E, R>, core: RefSubjectCore<A, E, R, R2>) {
257
261
  // Log any errors that fail to persist, but don't fail the consumer
258
262
  return Effect.ignoreLogged(Effect.provide(Effect.flatMap(core.deferredRef, (value) => set(ref, value)), core.context))
259
263
  }
@@ -262,25 +266,25 @@ function persistCore<R, E, A, R2>(ref: RefSubject<R, E, A>, core: RefSubjectCore
262
266
  * @since 1.20.0
263
267
  */
264
268
  export const make: {
265
- <R, E, A>(
266
- ref: RefSubject<R, E, A>,
269
+ <A, E = never, R = never>(
270
+ ref: RefSubject<A, E, R>,
267
271
  options?: RefSubjectOptions<A>
268
- ): Effect.Effect<R | Scope.Scope, never, RefSubject.Derived<never, E, A>>
272
+ ): Effect.Effect<RefSubject.Derived<A, E, R>, never, R | Scope.Scope>
269
273
 
270
- <R, E, A>(
271
- fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>,
274
+ <A, E = never, R = never>(
275
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R>,
272
276
  options?: RefSubjectOptions<A>
273
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A>>
277
+ ): Effect.Effect<RefSubject<A, E>, never, R | Scope.Scope>
274
278
 
275
- <R, E, A>(
276
- fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A> | RefSubject<R, E, A>,
279
+ <A, E = never, R = never>(
280
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R> | RefSubject<A, E, R>,
277
281
  options?: RefSubjectOptions<A>
278
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A> | RefSubject.Derived<never, E, A>>
279
- } = function make<R, E, A>(
280
- fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A> | RefSubject<R, E, A>,
282
+ ): Effect.Effect<RefSubject<A, E> | RefSubject.Derived<A, E, R>, never, R | Scope.Scope>
283
+ } = function make<A, E, R>(
284
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R> | RefSubject<A, E, R>,
281
285
  options?: RefSubjectOptions<A>
282
- ): Effect.Effect<R | Scope.Scope, never, any> {
283
- if (RefSubjectTypeId in fxOrEffect) return fromRefSubject(fxOrEffect as RefSubject<R, E, A>, options)
286
+ ): Effect.Effect<any, never, R | Scope.Scope> {
287
+ if (RefSubjectTypeId in fxOrEffect) return fromRefSubject(fxOrEffect as RefSubject<A, E, R>, options)
284
288
  else if (TypeId in fxOrEffect) return fromFx(fxOrEffect, options)
285
289
  else return fromEffect(fxOrEffect, options)
286
290
  }
@@ -291,7 +295,7 @@ export const make: {
291
295
  export function of<A, E = never>(
292
296
  a: A,
293
297
  options?: RefSubjectOptions<A>
294
- ): Effect.Effect<Scope.Scope, never, RefSubject<never, E, A>> {
298
+ ): Effect.Effect<RefSubject<A, E>, never, Scope.Scope> {
295
299
  return Effect.acquireRelease(
296
300
  withScopeAndFiberId(
297
301
  (scope, id) =>
@@ -308,8 +312,8 @@ export function of<A, E = never>(
308
312
  )
309
313
  }
310
314
 
311
- const withScopeAndFiberId = <R, E, A>(
312
- f: (scope: Scope.CloseableScope, id: FiberId.FiberId) => Effect.Effect<R, E, A>,
315
+ const withScopeAndFiberId = <A, E, R>(
316
+ f: (scope: Scope.CloseableScope, id: FiberId.FiberId) => Effect.Effect<A, E, R>,
313
317
  strategy: ExecutionStrategy.ExecutionStrategy
314
318
  ) => Effect.fiberIdWith((id) => withScope((scope) => f(scope, id), strategy))
315
319
 
@@ -321,12 +325,12 @@ const emptyContext = C.empty()
321
325
  export function unsafeMake<E, A>(
322
326
  params: {
323
327
  readonly id: FiberId.FiberId
324
- readonly initial: Effect.Effect<never, E, A>
328
+ readonly initial: Effect.Effect<A, E>
325
329
  readonly options?: RefSubjectOptions<A> | undefined
326
330
  readonly scope: Scope.CloseableScope
327
331
  readonly initialValue?: A
328
332
  }
329
- ): Effect.Effect<never, never, RefSubject<never, E, A>> {
333
+ ): Effect.Effect<RefSubject<A, E>> {
330
334
  const { id, initial, options, scope } = params
331
335
  return Effect.suspend(() => {
332
336
  const core = unsafeMakeCore(initial, id, emptyContext, scope, options)
@@ -342,20 +346,20 @@ export function unsafeMake<E, A>(
342
346
  })
343
347
  }
344
348
 
345
- class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Scope, E, A, Exclude<R, R2>, E, A>
346
- implements RefSubject<Exclude<R, R2>, E, A>
349
+ class RefSubjectImpl<A, E, R, R2> extends FxEffectBase<A, E, Exclude<R, R2> | Scope.Scope, A, E, Exclude<R, R2>>
350
+ implements RefSubject<A, E, Exclude<R, R2>>
347
351
  {
348
352
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
349
353
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
350
354
 
351
- readonly version: Effect.Effect<never, never, number>
352
- readonly interrupt: Effect.Effect<Exclude<R, R2>, never, void>
353
- readonly subscriberCount: Effect.Effect<Exclude<R, R2>, never, number>
355
+ readonly version: Effect.Effect<number>
356
+ readonly interrupt: Effect.Effect<void, never, Exclude<R, R2>>
357
+ readonly subscriberCount: Effect.Effect<number, never, Exclude<R, R2>>
354
358
 
355
- private readonly getSetDelete: GetSetDelete<Exclude<R, R2>, E, A>
359
+ private readonly getSetDelete: GetSetDelete<A, E, Exclude<R, R2>>
356
360
 
357
361
  constructor(
358
- private readonly core: RefSubjectCore<R, E, A, R2>
362
+ private readonly core: RefSubjectCore<A, E, R, R2>
359
363
  ) {
360
364
  super()
361
365
 
@@ -369,7 +373,7 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
369
373
  this.onFailure = this.onFailure.bind(this)
370
374
  }
371
375
 
372
- run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<Exclude<R, R2> | R3 | Scope.Scope, never, unknown> {
376
+ run<R3>(sink: Sink.Sink<A, E, R3>): Effect.Effect<unknown, never, Exclude<R, R2> | R3 | Scope.Scope> {
373
377
  return Effect.matchCauseEffect(getOrInitializeCore(this.core, true), {
374
378
  onFailure: (cause) => sink.onFailure(cause),
375
379
  onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.context)
@@ -377,28 +381,28 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
377
381
  }
378
382
 
379
383
  runUpdates<R3, E3, B>(
380
- run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<R3, E3, B>
384
+ run: (ref: GetSetDelete<A, E, Exclude<R, R2>>) => Effect.Effect<B, E3, R3>
381
385
  ) {
382
386
  return this.core.semaphore.withPermits(1)(run(this.getSetDelete))
383
387
  }
384
388
 
385
- onSuccess(value: A): Effect.Effect<Exclude<R, R2>, never, unknown> {
389
+ onSuccess(value: A): Effect.Effect<unknown, never, Exclude<R, R2>> {
386
390
  return setCore(this.core, value)
387
391
  }
388
392
 
389
- onFailure(cause: Cause.Cause<E>): Effect.Effect<Exclude<R, R2>, never, unknown> {
393
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, Exclude<R, R2>> {
390
394
  return onFailureCore(this.core, cause)
391
395
  }
392
396
 
393
- toEffect(): Effect.Effect<Exclude<R, R2>, E, A> {
397
+ toEffect(): Effect.Effect<A, E, Exclude<R, R2>> {
394
398
  return getOrInitializeCore(this.core, true)
395
399
  }
396
400
  }
397
401
 
398
- class DerivedImpl<R, E, A, R2> extends RefSubjectImpl<R, E, A, R2> implements RefSubject.Derived<Exclude<R, R2>, E, A> {
402
+ class DerivedImpl<A, E, R, R2> extends RefSubjectImpl<A, E, R, R2> implements RefSubject.Derived<A, E, Exclude<R, R2>> {
399
403
  constructor(
400
- core: RefSubjectCore<R, E, A, R2>,
401
- readonly persist: Effect.Effect<Exclude<R, R2>, never, void>
404
+ core: RefSubjectCore<A, E, R, R2>,
405
+ readonly persist: Effect.Effect<void, never, Exclude<R, R2>>
402
406
  ) {
403
407
  super(core)
404
408
  }
@@ -408,16 +412,16 @@ class DerivedImpl<R, E, A, R2> extends RefSubjectImpl<R, E, A, R2> implements Re
408
412
  * @since 1.20.0
409
413
  */
410
414
  export const set: {
411
- <A>(value: A): <R, E>(ref: RefSubject<R, E, A>) => Effect.Effect<R, E, A>
412
- <R, E, A>(ref: RefSubject<R, E, A>, a: A): Effect.Effect<R, E, A>
413
- } = dual(2, function set<R, E, A>(ref: RefSubject<R, E, A>, a: A): Effect.Effect<R, E, A> {
415
+ <A>(value: A): <E, R>(ref: RefSubject<A, E, R>) => Effect.Effect<A, E, R>
416
+ <A, E, R>(ref: RefSubject<A, E, R>, a: A): Effect.Effect<A, E, R>
417
+ } = dual(2, function set<A, E, R>(ref: RefSubject<A, E, R>, a: A): Effect.Effect<A, E, R> {
414
418
  return ref.runUpdates((ref) => ref.set(a))
415
419
  })
416
420
 
417
421
  /**
418
422
  * @since 1.20.0
419
423
  */
420
- export function reset<R, E, A>(ref: RefSubject<R, E, A>): Effect.Effect<R, E, Option.Option<A>> {
424
+ export function reset<A, E, R>(ref: RefSubject<A, E, R>): Effect.Effect<Option.Option<A>, E, R> {
421
425
  return ref.runUpdates((ref) => ref.delete)
422
426
  }
423
427
 
@@ -434,22 +438,22 @@ export {
434
438
  /**
435
439
  * @since 1.20.0
436
440
  */
437
- export interface GetSetDelete<R, E, A> {
441
+ export interface GetSetDelete<A, E, R> {
438
442
  /**
439
443
  * @since 1.20.0
440
444
  */
441
- readonly get: Effect.Effect<R, E, A>
445
+ readonly get: Effect.Effect<A, E, R>
442
446
  /**
443
447
  * @since 1.20.0
444
448
  */
445
- readonly set: (a: A) => Effect.Effect<R, never, A>
449
+ readonly set: (a: A) => Effect.Effect<A, never, R>
446
450
  /**
447
451
  * @since 1.20.0
448
452
  */
449
- readonly delete: Effect.Effect<R, E, Option.Option<A>>
453
+ readonly delete: Effect.Effect<Option.Option<A>, E, R>
450
454
  }
451
455
 
452
- function getSetDelete<R, E, A, R2>(ref: RefSubjectCore<R, E, A, R2>): GetSetDelete<Exclude<R, R2>, E, A> {
456
+ function getSetDelete<A, E, R, R2>(ref: RefSubjectCore<A, E, R, R2>): GetSetDelete<A, E, Exclude<R, R2>> {
453
457
  return {
454
458
  get: getOrInitializeCore(ref, false),
455
459
  set: (a) => setCore(ref, a),
@@ -461,16 +465,16 @@ function getSetDelete<R, E, A, R2>(ref: RefSubjectCore<R, E, A, R2>): GetSetDele
461
465
  * @since 1.20.0
462
466
  */
463
467
  export const updateEffect: {
464
- <A, R2, E2>(
465
- f: (value: A) => Effect.Effect<R2, E2, A>
466
- ): <R, E>(ref: RefSubject<R, E, A>) => Effect.Effect<R | R2, E | E2, A>
467
- <R, E, A, R2, E2>(
468
- ref: RefSubject<R, E, A>,
469
- f: (value: A) => Effect.Effect<R2, E2, A>
470
- ): Effect.Effect<R | R2, E | E2, A>
471
- } = dual(2, function updateEffect<R, E, A, R2, E2>(
472
- ref: RefSubject<R, E, A>,
473
- f: (value: A) => Effect.Effect<R2, E2, A>
468
+ <A, E2, R2>(
469
+ f: (value: A) => Effect.Effect<A, E2, R2>
470
+ ): <E, R>(ref: RefSubject<A, E, R>) => Effect.Effect<A, E | E2, R | R2>
471
+ <A, E, R, E2, R2>(
472
+ ref: RefSubject<A, E, R>,
473
+ f: (value: A) => Effect.Effect<A, E2, R2>
474
+ ): Effect.Effect<A, E | E2, R | R2>
475
+ } = dual(2, function updateEffect<A, E, R, E2, R2>(
476
+ ref: RefSubject<A, E, R>,
477
+ f: (value: A) => Effect.Effect<A, E2, R2>
474
478
  ) {
475
479
  return ref.runUpdates((ref) => Effect.flatMap(Effect.flatMap(ref.get, f), ref.set))
476
480
  })
@@ -479,9 +483,9 @@ export const updateEffect: {
479
483
  * @since 1.20.0
480
484
  */
481
485
  export const update: {
482
- <A>(f: (value: A) => A): <R, E>(ref: RefSubject<R, E, A>) => Effect.Effect<R, E, A>
483
- <R, E, A>(ref: RefSubject<R, E, A>, f: (value: A) => A): Effect.Effect<R, E, A>
484
- } = dual(2, function update<R, E, A>(ref: RefSubject<R, E, A>, f: (value: A) => A) {
486
+ <A>(f: (value: A) => A): <E, R>(ref: RefSubject<A, E, R>) => Effect.Effect<A, E, R>
487
+ <A, E, R>(ref: RefSubject<A, E, R>, f: (value: A) => A): Effect.Effect<A, E, R>
488
+ } = dual(2, function update<A, E, R>(ref: RefSubject<A, E, R>, f: (value: A) => A) {
485
489
  return updateEffect(ref, (value) => Effect.succeed(f(value)))
486
490
  })
487
491
 
@@ -489,16 +493,16 @@ export const update: {
489
493
  * @since 1.20.0
490
494
  */
491
495
  export const modifyEffect: {
492
- <A, R2, E2, B>(
493
- f: (value: A) => Effect.Effect<R2, E2, readonly [B, A]>
494
- ): <R, E>(ref: RefSubject<R, E, A>) => Effect.Effect<R | R2, E | E2, B>
495
- <R, E, A, R2, E2, B>(
496
- ref: RefSubject<R, E, A>,
497
- f: (value: A) => Effect.Effect<R2, E2, readonly [B, A]>
498
- ): Effect.Effect<R | R2, E | E2, B>
499
- } = dual(2, function modifyEffect<R, E, A, R2, E2, B>(
500
- ref: RefSubject<R, E, A>,
501
- f: (value: A) => Effect.Effect<R2, E2, readonly [B, A]>
496
+ <A, B, E2, R2>(
497
+ f: (value: A) => Effect.Effect<readonly [B, A], E2, R2>
498
+ ): <E, R>(ref: RefSubject<A, E, R>) => Effect.Effect<B, E | E2, R | R2>
499
+ <A, E, R, B, E2, R2>(
500
+ ref: RefSubject<A, E, R>,
501
+ f: (value: A) => Effect.Effect<readonly [B, A], E2, R2>
502
+ ): Effect.Effect<B, E | E2, R | R2>
503
+ } = dual(2, function modifyEffect<A, E, R, B, E2, R2>(
504
+ ref: RefSubject<A, E, R>,
505
+ f: (value: A) => Effect.Effect<readonly [B, A], E2, R2>
502
506
  ) {
503
507
  return ref.runUpdates(
504
508
  (ref) =>
@@ -513,9 +517,9 @@ export const modifyEffect: {
513
517
  * @since 1.20.0
514
518
  */
515
519
  export const modify: {
516
- <A, B>(f: (value: A) => readonly [B, A]): <R, E>(ref: RefSubject<R, E, A>) => Effect.Effect<R, E, B>
517
- <R, E, A, B>(ref: RefSubject<R, E, A>, f: (value: A) => readonly [B, A]): Effect.Effect<R, E, B>
518
- } = dual(2, function modify<R, E, A, B>(ref: RefSubject<R, E, A>, f: (value: A) => readonly [B, A]) {
520
+ <A, B>(f: (value: A) => readonly [B, A]): <E, R>(ref: RefSubject<A, E, R>) => Effect.Effect<B, E, R>
521
+ <A, E, R, B>(ref: RefSubject<A, E, R>, f: (value: A) => readonly [B, A]): Effect.Effect<B, E, R>
522
+ } = dual(2, function modify<A, E, R, B>(ref: RefSubject<A, E, R>, f: (value: A) => readonly [B, A]) {
519
523
  return modifyEffect(ref, (value) => Effect.succeed(f(value)))
520
524
  })
521
525
 
@@ -525,27 +529,27 @@ const isRefSubjectDataFirst = (args: IArguments) => isRefSubject(args[0])
525
529
  * @since 1.20.0
526
530
  */
527
531
  export const runUpdates: {
528
- <R, E, A, R2, E2, B, R3 = never, E3 = never, C = never>(
529
- f: (ref: GetSetDelete<R, E, A>) => Effect.Effect<R2, E2, B>,
532
+ <A, E, R, B, E2, R2, R3 = never, E3 = never, C = never>(
533
+ f: (ref: GetSetDelete<A, E, R>) => Effect.Effect<B, E2, R2>,
530
534
  options?:
531
- | { readonly onInterrupt: (value: A) => Effect.Effect<R3, E3, C>; readonly value?: "initial" | "current" }
535
+ | { readonly onInterrupt: (value: A) => Effect.Effect<C, E3, R3>; readonly value?: "initial" | "current" }
532
536
  | undefined
533
- ): (ref: RefSubject<R, E, A>) => Effect.Effect<R | R2 | R3, E | E2 | E3, B>
537
+ ): (ref: RefSubject<A, E, R>) => Effect.Effect<B, E | E2 | E3, R | R2 | R3>
534
538
 
535
- <R, E, A, R2, E2, B, R3 = never, E3 = never, C = never>(
536
- ref: RefSubject<R, E, A>,
537
- f: (ref: GetSetDelete<R, E, A>) => Effect.Effect<R2, E2, B>,
539
+ <A, E, R, B, E2, R2, R3 = never, E3 = never, C = never>(
540
+ ref: RefSubject<A, E, R>,
541
+ f: (ref: GetSetDelete<A, E, R>) => Effect.Effect<B, E2, R2>,
538
542
  options?:
539
- | { readonly onInterrupt: (value: A) => Effect.Effect<R3, E3, C>; readonly value?: "initial" | "current" }
543
+ | { readonly onInterrupt: (value: A) => Effect.Effect<C, E3, R3>; readonly value?: "initial" | "current" }
540
544
  | undefined
541
- ): Effect.Effect<R | R2 | R3, E | E2 | E3, B>
545
+ ): Effect.Effect<B, E | E2 | E3, R | R2 | R3>
542
546
  } = dual(
543
547
  isRefSubjectDataFirst,
544
- function runUpdates<R, E, A, R2, E2, B, R3 = never, E3 = never, C = never>(
545
- ref: RefSubject<R, E, A>,
546
- f: (ref: GetSetDelete<R, E, A>) => Effect.Effect<R2, E2, B>,
548
+ function runUpdates<A, E, R, B, E2, R2, R3 = never, E3 = never, C = never>(
549
+ ref: RefSubject<A, E, R>,
550
+ f: (ref: GetSetDelete<A, E, R>) => Effect.Effect<B, E2, R2>,
547
551
  options?: {
548
- readonly onInterrupt: (value: A) => Effect.Effect<R3, E3, C>
552
+ readonly onInterrupt: (value: A) => Effect.Effect<C, E3, R3>
549
553
  readonly value?: "initial" | "current"
550
554
  }
551
555
  ) {
@@ -585,21 +589,21 @@ export const runUpdates: {
585
589
  }
586
590
  )
587
591
 
588
- class RefSubjectCore<R, E, A, R2> {
592
+ class RefSubjectCore<A, E, R, R2> {
589
593
  constructor(
590
- readonly initial: Effect.Effect<R, E, A>,
591
- readonly subject: Subject.Subject<R, E, A>,
594
+ readonly initial: Effect.Effect<A, E, R>,
595
+ readonly subject: Subject.Subject<A, E, R>,
592
596
  readonly context: C.Context<R2>,
593
597
  readonly scope: Scope.CloseableScope,
594
598
  readonly deferredRef: DeferredRef.DeferredRef<E, A>,
595
599
  readonly semaphore: Effect.Semaphore
596
600
  ) {}
597
601
 
598
- public _fiber: Fiber.Fiber<E, A> | undefined = undefined
602
+ public _fiber: Fiber.Fiber<A, E> | undefined = undefined
599
603
  }
600
604
 
601
- function makeCore<R, E, A>(
602
- initial: Effect.Effect<R, E, A>,
605
+ function makeCore<A, E, R>(
606
+ initial: Effect.Effect<A, E, R>,
603
607
  options?: RefSubjectOptions<A>
604
608
  ) {
605
609
  return Effect.context<R | Scope.Scope>().pipe(
@@ -613,7 +617,7 @@ function makeCore<R, E, A>(
613
617
  "deferredRef",
614
618
  () => DeferredRef.make<E, A>(getExitEquivalence(options?.eq ?? Equal.equals))
615
619
  ),
616
- Effect.let("subject", () => Subject.unsafeMake<E, A>(Math.max(1, options?.replay ?? 1))),
620
+ Effect.let("subject", () => Subject.unsafeMake<A, E>(Math.max(1, options?.replay ?? 1))),
617
621
  Effect.tap(({ scope, subject }) => Scope.addFinalizer(scope, subject.interrupt)),
618
622
  Effect.map(({ ctx, deferredRef, scope, subject }) =>
619
623
  new RefSubjectCore(
@@ -628,8 +632,8 @@ function makeCore<R, E, A>(
628
632
  )
629
633
  }
630
634
 
631
- function unsafeMakeCore<R, E, A>(
632
- initial: Effect.Effect<R, E, A>,
635
+ function unsafeMakeCore<A, E, R>(
636
+ initial: Effect.Effect<A, E, R>,
633
637
  id: FiberId.FiberId,
634
638
  ctx: C.Context<R>,
635
639
  scope: Scope.CloseableScope,
@@ -637,7 +641,7 @@ function unsafeMakeCore<R, E, A>(
637
641
  ) {
638
642
  return new RefSubjectCore(
639
643
  initial,
640
- Subject.unsafeMake<E, A>(Math.max(1, options?.replay ?? 1)),
644
+ Subject.unsafeMake<A, E>(Math.max(1, options?.replay ?? 1)),
641
645
  ctx,
642
646
  scope,
643
647
  DeferredRef.unsafeMake(id, getExitEquivalence(options?.eq ?? Equal.equals)),
@@ -645,10 +649,10 @@ function unsafeMakeCore<R, E, A>(
645
649
  )
646
650
  }
647
651
 
648
- function getOrInitializeCore<R, E, A, R2>(
649
- core: RefSubjectCore<R, E, A, R2>,
652
+ function getOrInitializeCore<A, E, R, R2>(
653
+ core: RefSubjectCore<A, E, R, R2>,
650
654
  lockInitialize: boolean
651
- ): Effect.Effect<Exclude<R, R2>, E, A> {
655
+ ): Effect.Effect<A, E, Exclude<R, R2>> {
652
656
  return Effect.suspend(() => {
653
657
  if (core._fiber === undefined && Option.isNone(core.deferredRef.current)) {
654
658
  return initializeCoreAndTap(core, lockInitialize)
@@ -658,10 +662,10 @@ function getOrInitializeCore<R, E, A, R2>(
658
662
  })
659
663
  }
660
664
 
661
- function initializeCoreEffect<R, E, A, R2>(
662
- core: RefSubjectCore<R, E, A, R2>,
665
+ function initializeCoreEffect<A, E, R, R2>(
666
+ core: RefSubjectCore<A, E, R, R2>,
663
667
  lock: boolean
664
- ): Effect.Effect<Exclude<R, R2>, never, Fiber.Fiber<E, A>> {
668
+ ): Effect.Effect<Fiber.Fiber<A, E>, never, Exclude<R, R2>> {
665
669
  const initialize = Effect.onExit(
666
670
  Effect.provide(core.initial, core.context),
667
671
  (exit) =>
@@ -680,11 +684,11 @@ function initializeCoreEffect<R, E, A, R2>(
680
684
  )
681
685
  }
682
686
 
683
- function initializeCore<R, E, A, R2>(
684
- core: RefSubjectCore<R, E, A, R2>,
687
+ function initializeCore<A, E, R, R2>(
688
+ core: RefSubjectCore<A, E, R, R2>,
685
689
  lock: boolean
686
- ): Effect.Effect<Exclude<R, R2>, never, Fiber.Fiber<E, A>> {
687
- type Z = Effect.Effect<Exclude<R, R2>, never, Fiber.Fiber<E, A>>
690
+ ): Effect.Effect<Fiber.Fiber<A, E>, never, Exclude<R, R2>> {
691
+ type Z = Effect.Effect<Fiber.Fiber<A, E>, never, Exclude<R, R2>>
688
692
 
689
693
  const onSuccess = (a: A): Z => {
690
694
  core.deferredRef.done(Exit.succeed(a))
@@ -710,17 +714,17 @@ function initializeCore<R, E, A, R2>(
710
714
  })
711
715
  }
712
716
 
713
- function initializeCoreAndTap<R, E, A, R2>(
714
- core: RefSubjectCore<R, E, A, R2>,
717
+ function initializeCoreAndTap<A, E, R, R2>(
718
+ core: RefSubjectCore<A, E, R, R2>,
715
719
  lock: boolean
716
- ): Effect.Effect<Exclude<R, R2>, E, A> {
720
+ ): Effect.Effect<A, E, Exclude<R, R2>> {
717
721
  return Effect.zipRight(
718
722
  initializeCore(core, lock),
719
723
  tapEventCore(core, core.deferredRef)
720
724
  )
721
725
  }
722
726
 
723
- function setCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>, a: A): Effect.Effect<Exclude<R, R2>, never, A> {
727
+ function setCore<A, E, R, R2>(core: RefSubjectCore<A, E, R, R2>, a: A): Effect.Effect<A, never, Exclude<R, R2>> {
724
728
  const exit = Exit.succeed(a)
725
729
 
726
730
  return Effect.suspend(() => {
@@ -734,7 +738,7 @@ function setCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>, a: A): Effect.E
734
738
  })
735
739
  }
736
740
 
737
- function onFailureCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>, cause: Cause.Cause<E>) {
741
+ function onFailureCore<A, E, R, R2>(core: RefSubjectCore<A, E, R, R2>, cause: Cause.Cause<E>) {
738
742
  const exit = Exit.failCause(cause)
739
743
 
740
744
  return Effect.suspend(() => {
@@ -746,7 +750,7 @@ function onFailureCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>, cause: Ca
746
750
  })
747
751
  }
748
752
 
749
- function interruptCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>): Effect.Effect<R, never, void> {
753
+ function interruptCore<A, E, R, R2>(core: RefSubjectCore<A, E, R, R2>): Effect.Effect<void, never, R> {
750
754
  return Effect.fiberIdWith((id) => {
751
755
  core.deferredRef.reset()
752
756
 
@@ -758,9 +762,9 @@ function interruptCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>): Effect.E
758
762
  })
759
763
  }
760
764
 
761
- function deleteCore<R, E, A, R2>(
762
- core: RefSubjectCore<R, E, A, R2>
763
- ): Effect.Effect<Exclude<R, R2>, E, Option.Option<A>> {
765
+ function deleteCore<A, E, R, R2>(
766
+ core: RefSubjectCore<A, E, R, R2>
767
+ ): Effect.Effect<Option.Option<A>, E, Exclude<R, R2>> {
764
768
  return Effect.suspend(() => {
765
769
  const current = core.deferredRef.current
766
770
  core.deferredRef.reset()
@@ -779,9 +783,9 @@ function deleteCore<R, E, A, R2>(
779
783
  })
780
784
  }
781
785
 
782
- function tapEventCore<R, E, A, R2, R3>(
783
- core: RefSubjectCore<R, E, A, R2>,
784
- effect: Effect.Effect<R3, E, A>
786
+ function tapEventCore<A, E, R, R2, R3>(
787
+ core: RefSubjectCore<A, E, R, R2>,
788
+ effect: Effect.Effect<A, E, R3>
785
789
  ) {
786
790
  return effect.pipe(
787
791
  Effect.exit,
@@ -790,10 +794,10 @@ function tapEventCore<R, E, A, R2, R3>(
790
794
  )
791
795
  }
792
796
 
793
- function sendEvent<R, E, A, R2>(
794
- core: RefSubjectCore<R, E, A, R2>,
795
- exit: Exit.Exit<E, A>
796
- ): Effect.Effect<Exclude<R, R2>, never, unknown> {
797
+ function sendEvent<A, E, R, R2>(
798
+ core: RefSubjectCore<A, E, R, R2>,
799
+ exit: Exit.Exit<A, E>
800
+ ): Effect.Effect<unknown, never, Exclude<R, R2>> {
797
801
  if (Exit.isSuccess(exit)) {
798
802
  return Effect.provide(core.subject.onSuccess(exit.value), core.context)
799
803
  } else {
@@ -805,37 +809,37 @@ function sendEvent<R, E, A, R2>(
805
809
  * @since 1.20.0
806
810
  */
807
811
  export const mapEffect: {
808
- <A, R2, E2, B>(
809
- f: (a: A) => Effect.Effect<R2, E2, B>
812
+ <A, B, E2, R2>(
813
+ f: (a: A) => Effect.Effect<B, E2, R2>
810
814
  ): {
811
- <R, E>(ref: RefSubject<R, E, A> | Computed<R, E, A>): Computed<R | R2, E | E2, B>
812
- <R, E>(ref: Filtered<R, E, A>): Filtered<R | R2, E | E2, B>
813
- <R0, E0, R, E, R2, E2, C>(
814
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
815
- f: (a: A) => Effect.Effect<R2, E2, C>
816
- ): Computed<R0 | R2, E0 | E | E2, C>
817
- }
818
-
819
- <R, E, A, R2, E2, B>(
820
- ref: RefSubject<R, E, A> | Computed<R, E, A>,
821
- f: (a: A) => Effect.Effect<R2, E2, B>
822
- ): Computed<R | R2, E | E2, B>
823
-
824
- <R, E, A, R2, E2, B>(
825
- ref: Filtered<R, E, A>,
826
- f: (a: A) => Effect.Effect<R2, E2, B>
827
- ): Filtered<R | R2, E | E2, B>
828
-
829
- <R0, E0, R, E, A, R2, E2, R3, E3, C>(
830
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
831
- f: (a: A) => Effect.Effect<R3, E3, C>
832
- ): Computed<R0 | R2 | R3 | Exclude<R, Scope.Scope>, E0 | E | E2 | E3, C>
833
- } = dual(2, function mapEffect<R0, E0, R, E, A, R2, E2, R3, E3, C>(
834
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
835
- f: (a: A) => Effect.Effect<R3, E3, C>
815
+ <E, R>(ref: RefSubject<A, E, R> | Computed<A, E, R>): Computed<B, E | E2, R | R2>
816
+ <E, R>(ref: Filtered<A, E, R>): Filtered<B, E | E2, R | R2>
817
+ <R0, E0, R, E, E2, R2, C>(
818
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
819
+ f: (a: A) => Effect.Effect<C, E2, R2>
820
+ ): Computed<C, E0 | E | E2, R0 | R | R2>
821
+ }
822
+
823
+ <A, E, R, B, E2, R2>(
824
+ ref: RefSubject<A, E, R> | Computed<A, E, R>,
825
+ f: (a: A) => Effect.Effect<B, E2, R2>
826
+ ): Computed<B, E | E2, R | R2>
827
+
828
+ <A, E, R, B, E2, R2>(
829
+ ref: Filtered<A, E, R>,
830
+ f: (a: A) => Effect.Effect<B, E2, R2>
831
+ ): Filtered<B, E | E2, R | R2>
832
+
833
+ <R0, E0, A, E, R, E2, R2, C, E3, R3>(
834
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
835
+ f: (a: A) => Effect.Effect<C, E3, R3>
836
+ ): Computed<C, E0 | E | E2 | E3, R0 | R2 | R3 | Exclude<R, Scope.Scope>>
837
+ } = dual(2, function mapEffect<R0, E0, A, E, R, E2, R2, C, E3, R3>(
838
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
839
+ f: (a: A) => Effect.Effect<C, E3, R3>
836
840
  ):
837
- | Computed<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, C>
838
- | Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, C>
841
+ | Computed<C, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3>
842
+ | Filtered<C, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3>
839
843
  {
840
844
  return FilteredTypeId in versioned
841
845
  ? FilteredImpl.make(versioned, (a) => Effect.asSome(f(a)))
@@ -847,32 +851,32 @@ export const mapEffect: {
847
851
  */
848
852
  export const map: {
849
853
  <A, B>(f: (a: A) => B): {
850
- <R, E>(ref: RefSubject<R, E, A>): Computed<R, E, B>
851
- <R, E>(ref: Computed<R, E, A>): Computed<R, E, B>
854
+ <E, R>(ref: RefSubject<A, E, R>): Computed<B, E, R>
855
+ <E, R>(ref: Computed<A, E, R>): Computed<B, E, R>
852
856
 
853
- <R, E>(ref: Filtered<R, E, A>): Filtered<R, E, B>
857
+ <E, R>(ref: Filtered<A, E, R>): Filtered<B, E, R>
854
858
 
855
- <R0, E0, R, E, R2, E2>(
856
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
859
+ <R0, E0, R, E, E2, R2>(
860
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
857
861
  f: (a: A) => B
858
- ): Computed<R0 | R2, E0 | E | E2, B>
862
+ ): Computed<B, E0 | E | E2, R0 | R2>
859
863
  }
860
864
 
861
- <R, E, A, B>(ref: RefSubject<R, E, A> | Computed<R, E, A>, f: (a: A) => B): Computed<R, E, B>
862
- <R, E, A, B>(filtered: Filtered<R, E, A>, f: (a: A) => B): Filtered<R, E, B>
865
+ <A, E, R, B>(ref: RefSubject<A, E, R> | Computed<A, E, R>, f: (a: A) => B): Computed<B, E, R>
866
+ <A, E, R, B>(filtered: Filtered<A, E, R>, f: (a: A) => B): Filtered<B, E, R>
863
867
 
864
- <R0, E0, R, E, A, R2, E2, B>(
865
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
868
+ <R0, E0, A, E, R, B, E2, R2>(
869
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
866
870
  f: (a: A) => B
867
871
  ):
868
- | Computed<R0 | R2 | Exclude<R, Scope.Scope>, E0 | E | E2, B>
869
- | Filtered<R0 | R2 | Exclude<R, Scope.Scope>, E0 | E | E2, B>
870
- } = dual(2, function map<R0, E0, R, E, A, R2, E2, B>(
871
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
872
+ | Computed<B, E0 | E | E2, R0 | R2 | Exclude<R, Scope.Scope>>
873
+ | Filtered<B, E0 | E | E2, R0 | R2 | Exclude<R, Scope.Scope>>
874
+ } = dual(2, function map<R0, E0, A, E, R, B, E2, R2>(
875
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
872
876
  f: (a: A) => B
873
877
  ):
874
- | Computed<R0 | Exclude<R, Scope.Scope> | R2, E0 | E | E2, B>
875
- | Filtered<R0 | Exclude<R, Scope.Scope> | R2, E0 | E | E2, B>
878
+ | Computed<B, E0 | E | E2, R0 | Exclude<R, Scope.Scope> | R2>
879
+ | Filtered<B, E0 | E | E2, R0 | Exclude<R, Scope.Scope> | R2>
876
880
  {
877
881
  return mapEffect(versioned, (a) => Effect.succeed(f(a)))
878
882
  })
@@ -881,29 +885,29 @@ export const map: {
881
885
  * @since 1.20.0
882
886
  */
883
887
  export const filterMapEffect: {
884
- <A, R2, E2, B>(
885
- f: (a: A) => Effect.Effect<R2, E2, Option.Option<B>>
888
+ <A, B, E2, R2>(
889
+ f: (a: A) => Effect.Effect<Option.Option<B>, E2, R2>
886
890
  ): {
887
- <R, E>(ref: RefSubject<R, E, A> | Computed<R, E, A>): Filtered<R | R2, E | E2, B>
888
- <R, E>(ref: Filtered<R, E, A>): Filtered<R | R2, E | E2, B>
889
- <R0, E0, R, E, R2, E2, B>(
890
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
891
- f: (a: A) => Effect.Effect<R2, E2, Option.Option<B>>
892
- ): Filtered<R0 | R2, E0 | E | E2, B>
893
- }
894
-
895
- <R, E, A, R2, E2, B>(
896
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>,
897
- f: (a: A) => Effect.Effect<R2, E2, Option.Option<B>>
898
- ): Filtered<R | R2, E | E2, B>
899
- <R0, E0, R, E, A, R2, E2, B, R3, E3>(
900
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
901
- f: (a: A) => Effect.Effect<R3, E3, Option.Option<B>>
902
- ): Filtered<R0 | R2 | R3 | Exclude<R, Scope.Scope>, E0 | E | E2 | E3, B>
903
- } = dual(2, function filterMapEffect<R0, E0, R, E, A, R2, E2, B, R3, E3>(
904
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
905
- f: (a: A) => Effect.Effect<R3, E3, Option.Option<B>>
906
- ): Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, B> {
891
+ <E, R>(ref: RefSubject<A, E, R> | Computed<A, E, R>): Filtered<B, E | E2, R | R2>
892
+ <E, R>(ref: Filtered<A, E, R>): Filtered<B, E | E2, R | R2>
893
+ <R0, E0, B, E, R, E2, R2>(
894
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
895
+ f: (a: A) => Effect.Effect<Option.Option<B>, E2, R2>
896
+ ): Filtered<B, E0 | E | E2, R0 | R2>
897
+ }
898
+
899
+ <A, E, R, B, E2, R2>(
900
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
901
+ f: (a: A) => Effect.Effect<Option.Option<B>, E2, R2>
902
+ ): Filtered<B, E | E2, R | R2>
903
+ <R0, E0, A, E, R, B, E2, R2, R3, E3>(
904
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
905
+ f: (a: A) => Effect.Effect<Option.Option<B>, E3, R3>
906
+ ): Filtered<B, E0 | E | E2 | E3, R0 | R2 | R3 | Exclude<R, Scope.Scope>>
907
+ } = dual(2, function filterMapEffect<R0, E0, A, E, R, B, E2, R2, R3, E3>(
908
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
909
+ f: (a: A) => Effect.Effect<Option.Option<B>, E3, R3>
910
+ ): Filtered<B, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3> {
907
911
  return FilteredImpl.make(versioned, f)
908
912
  })
909
913
 
@@ -912,26 +916,26 @@ export const filterMapEffect: {
912
916
  */
913
917
  export const filterMap: {
914
918
  <A, B>(f: (a: A) => Option.Option<B>): {
915
- <R, E>(ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>): Filtered<R, E, B>
916
- <R0, E0, R, E, R2, E2, B>(
917
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
919
+ <E, R>(ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>): Filtered<B, E, R>
920
+ <R0, E0, B, E, R, E2, R2>(
921
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
918
922
  f: (a: A) => Option.Option<B>
919
- ): Filtered<R0 | R2, E0 | E | E2, B>
923
+ ): Filtered<B, E0 | E | E2, R0 | R2>
920
924
  }
921
925
 
922
- <R0, E0, R, E, A, R2, E2, B>(
923
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
926
+ <R0, E0, A, E, R, B, E2, R2>(
927
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
924
928
  f: (a: A) => Option.Option<B>
925
- ): Filtered<R0 | R2 | Exclude<R, Scope.Scope>, E0 | E | E2, B>
929
+ ): Filtered<B, E0 | E | E2, R0 | R2 | Exclude<R, Scope.Scope>>
926
930
 
927
- <R, E, A, B>(
928
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>,
931
+ <A, E, R, B>(
932
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
929
933
  f: (a: A) => Option.Option<B>
930
- ): Filtered<R, E, B>
931
- } = dual(2, function filterMap<R0, E0, R, E, A, R2, E2, B>(
932
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
934
+ ): Filtered<B, E, R>
935
+ } = dual(2, function filterMap<R0, E0, A, E, R, B, E2, R2>(
936
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
933
937
  f: (a: A) => Option.Option<B>
934
- ): Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R2, E0 | E | E2, B> {
938
+ ): Filtered<B, E0 | E | E2, R0 | Exclude<R, Scope.Scope> | R2 | R2> {
935
939
  return FilteredImpl.make(versioned, (a) => Effect.succeed(f(a)))
936
940
  })
937
941
 
@@ -939,37 +943,42 @@ export const filterMap: {
939
943
  * @since 1.20.0
940
944
  */
941
945
  export const compact: {
942
- <R, E, A>(ref: RefSubject<R, E, Option.Option<A>> | Computed<R, E, Option.Option<A>>): Filtered<R, E, A>
943
- <R, E, A>(ref: Filtered<R, E, Option.Option<A>>): Filtered<R, E, A>
946
+ <A, E, R>(ref: Computed<Option.Option<A>, E, R>): Filtered<A>
947
+ <A, E, R>(ref: Filtered<Option.Option<A>, E, R>): Filtered<A>
944
948
 
945
- <R0, E0, R, E, A, R2, E2>(
946
- versioned: Versioned.Versioned<R0, E0, R, E, Option.Option<A>, R2, E2, Option.Option<A>>
949
+ <R0, E0, A, E, R, E2, R2>(
950
+ versioned: Versioned.Versioned<R0, E0, Option.Option<A>, E, R, Option.Option<A>, E2, R2>
947
951
  ): Filtered<
948
- R0 | R2 | Exclude<R, Scope.Scope>,
952
+ A,
949
953
  E0 | E | Exclude<E, Cause.NoSuchElementException> | Exclude<E2, Cause.NoSuchElementException>,
950
- A
954
+ R0 | R2 | Exclude<R, Scope.Scope>
951
955
  >
952
- } = <R0, E0, R, E, A, R2, E2>(
953
- versioned: Versioned.Versioned<R0, E0, R, E, Option.Option<A>, R2, E2, Option.Option<A>>
954
- ): Filtered<R0 | R2 | Exclude<R, Scope.Scope>, E0 | E | Exclude<E | E2, Cause.NoSuchElementException>, A> =>
955
- filterMap(versioned, identity) as any
956
+ } = function compact<R0, E0, A, E, R, E2, R2>(
957
+ versioned: Versioned.Versioned<R0, E0, Option.Option<A>, E, R, Option.Option<A>, E2, R2>
958
+ ): Filtered<
959
+ A,
960
+ E0 | E | Exclude<E, Cause.NoSuchElementException> | Exclude<E2, Cause.NoSuchElementException>,
961
+ R0 | R2 | Exclude<R, Scope.Scope>
962
+ > {
963
+ return FilteredImpl.make(versioned, Effect.succeed)
964
+ } as any
956
965
 
957
966
  /**
958
967
  * @since 1.20.0
959
968
  */
960
969
  export const filterEffect: {
961
- <R, E, A, R2, E2>(
962
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>,
963
- f: (a: A) => Effect.Effect<R2, E2, boolean>
964
- ): Filtered<R | R2, E | E2, A>
965
- <R0, E0, R, E, A, R2, E2, R3, E3>(
966
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
967
- f: (a: A) => Effect.Effect<R3, E3, boolean>
968
- ): Filtered<R0 | R2 | R3 | Exclude<R, Scope.Scope>, E0 | E | E2 | E3, A>
969
- } = dual(2, function filterEffect<R0, E0, R, E, A, R2, E2, R3, E3>(
970
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
971
- f: (a: A) => Effect.Effect<R3, E3, boolean>
972
- ): Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, A> {
970
+ <A, E, R, E2, R2>(
971
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
972
+ f: (a: A) => Effect.Effect<boolean, E2, R2>
973
+ ): Filtered<A, E | E2, R | R2>
974
+ <R0, E0, A, E, R, E2, R2, R3, E3>(
975
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
976
+ f: (a: A) => Effect.Effect<boolean, E3, R3>
977
+ ): Filtered<A, E0 | E | E2 | E3, R0 | R2 | R3 | Exclude<R, Scope.Scope>>
978
+ } = dual(2, function filterEffect<R0, E0, A, E, R, E2, R2, R3, E3>(
979
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
980
+ f: (a: A) => Effect.Effect<boolean, E3, R3>
981
+ ): Filtered<A, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3> {
973
982
  return FilteredImpl.make(versioned, (a) => Effect.map(f(a), (b) => b ? Option.some(a) : Option.none()))
974
983
  })
975
984
 
@@ -978,46 +987,46 @@ export const filterEffect: {
978
987
  */
979
988
  export const filter: {
980
989
  <A>(f: (a: A) => boolean): {
981
- <R, E>(ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>): Filtered<R, E, A>
982
- <R0, E0, R, E, R2, E2>(
983
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
990
+ <E, R>(ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>): Filtered<A, E, R>
991
+ <R0, E0, R, E, E2, R2>(
992
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
984
993
  f: (a: A) => boolean
985
- ): Filtered<R0 | R2, E0 | E | E2, A>
994
+ ): Filtered<A, E0 | E | E2, R0 | R2>
986
995
  }
987
996
 
988
- <R, E, A>(ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>, f: (a: A) => boolean): Filtered<R, E, A>
989
- <R0, E0, R, E, A, R2, E2, R3, E3>(
990
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
997
+ <A, E, R>(ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>, f: (a: A) => boolean): Filtered<A, E, R>
998
+ <R0, E0, A, E, R, E2, R2, R3, E3>(
999
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
991
1000
  f: (a: A) => boolean
992
- ): Filtered<R0 | R2 | R3 | Exclude<R, Scope.Scope>, E0 | E | E2 | E3, A>
993
- } = dual(2, function filter<R0, E0, R, E, A, R2, E2, R3, E3>(
994
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
1001
+ ): Filtered<A, E0 | E | E2 | E3, R0 | R2 | R3 | Exclude<R, Scope.Scope>>
1002
+ } = dual(2, function filter<R0, E0, A, E, R, E2, R2, R3, E3>(
1003
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
995
1004
  f: (a: A) => boolean
996
- ): Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, A> {
1005
+ ): Filtered<A, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3> {
997
1006
  return FilteredImpl.make(versioned, (a) => Effect.succeed(f(a) ? Option.some(a) : Option.none()))
998
1007
  })
999
1008
 
1000
- class ComputedImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.VersionedTransform<
1009
+ class ComputedImpl<R0, E0, A, E, R, E2, R2, C, E3, R3> extends Versioned.VersionedTransform<
1001
1010
  R0,
1002
1011
  E0,
1003
- R,
1012
+ A,
1004
1013
  E,
1014
+ R,
1005
1015
  A,
1006
- R2,
1007
1016
  E2,
1008
- A,
1009
- R0 | Exclude<R, Scope.Scope> | R2 | R3 | Scope.Scope,
1017
+ R2,
1018
+ C,
1010
1019
  E0 | E | E2 | E3,
1020
+ R0 | Exclude<R, Scope.Scope> | R2 | R3 | Scope.Scope,
1011
1021
  C,
1012
- R0 | Exclude<R, Scope.Scope> | R2 | R3,
1013
1022
  E0 | E | E2 | E3,
1014
- C
1015
- > implements Computed<R0 | Exclude<R, Scope.Scope> | R2 | R3, E0 | E | E2 | E3, C> {
1023
+ R0 | Exclude<R, Scope.Scope> | R2 | R3
1024
+ > implements Computed<C, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3> {
1016
1025
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1017
1026
 
1018
1027
  constructor(
1019
- readonly input: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
1020
- readonly f: (a: A) => Effect.Effect<R3, E3, C>
1028
+ readonly input: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
1029
+ readonly f: (a: A) => Effect.Effect<C, E3, R3>
1021
1030
  ) {
1022
1031
  super(
1023
1032
  input,
@@ -1026,35 +1035,35 @@ class ComputedImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
1026
1035
  )
1027
1036
  }
1028
1037
 
1029
- static make<R0, E0, R, E, A, R2, E2, R3, E3, C>(
1030
- input: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
1031
- f: (a: A) => Effect.Effect<R3, E3, C>
1032
- ): Computed<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, C> {
1038
+ static make<R0, E0, A, E, R, E2, R2, C, E3, R3>(
1039
+ input: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
1040
+ f: (a: A) => Effect.Effect<C, E3, R3>
1041
+ ): Computed<C, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3> {
1033
1042
  return new ComputedImpl(input, f)
1034
1043
  }
1035
1044
  }
1036
1045
 
1037
- class FilteredImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.VersionedTransform<
1046
+ class FilteredImpl<R0, E0, A, E, R, E2, R2, C, E3, R3> extends Versioned.VersionedTransform<
1038
1047
  R0,
1039
1048
  E0,
1040
- R,
1049
+ A,
1041
1050
  E,
1051
+ R,
1042
1052
  A,
1043
- R2,
1044
1053
  E2,
1045
- A,
1046
- Exclude<R, Scope.Scope> | R2 | R3 | Scope.Scope,
1054
+ R2,
1055
+ C,
1047
1056
  E0 | E | E2 | E3,
1057
+ Exclude<R, Scope.Scope> | R2 | R3 | Scope.Scope,
1048
1058
  C,
1049
- R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3,
1050
1059
  E0 | E | E2 | E3 | Cause.NoSuchElementException,
1051
- C
1052
- > implements Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, C> {
1060
+ R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3
1061
+ > implements Filtered<C, E0 | E | E2 | E3, R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3> {
1053
1062
  readonly [FilteredTypeId]: FilteredTypeId = FilteredTypeId
1054
1063
 
1055
1064
  constructor(
1056
- readonly input: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
1057
- readonly f: (a: A) => Effect.Effect<R3, E3, Option.Option<C>>
1065
+ readonly input: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
1066
+ readonly f: (a: A) => Effect.Effect<Option.Option<C>, E3, R3>
1058
1067
  ) {
1059
1068
  super(
1060
1069
  input,
@@ -1063,18 +1072,18 @@ class FilteredImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
1063
1072
  )
1064
1073
  }
1065
1074
 
1066
- static make<R0, E0, R, E, A, R2, E2, R3, E3, C>(
1067
- input: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
1068
- f: (a: A) => Effect.Effect<R3, E3, Option.Option<C>>
1075
+ static make<R0, E0, A, E, R, E2, R2, C, E3, R3>(
1076
+ input: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
1077
+ f: (a: A) => Effect.Effect<Option.Option<C>, E3, R3>
1069
1078
  ): Filtered<
1070
- R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3,
1079
+ C,
1071
1080
  E0 | E | Exclude<E2, Cause.NoSuchElementException> | E3,
1072
- C
1081
+ R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3
1073
1082
  > {
1074
1083
  return new FilteredImpl(input, f) as any
1075
1084
  }
1076
1085
 
1077
- asComputed(): Computed<R0 | R2 | R3 | Exclude<R, Scope.Scope>, E0 | E | E2 | E3, Option.Option<C>> {
1086
+ asComputed(): Computed<Option.Option<C>, E0 | E | E2 | E3, R0 | R2 | R3 | Exclude<R, Scope.Scope>> {
1078
1087
  return ComputedImpl.make(this.input, this.f)
1079
1088
  }
1080
1089
  }
@@ -1084,27 +1093,27 @@ class FilteredImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
1084
1093
  */
1085
1094
  export const skipRepeatsWith: {
1086
1095
  <A>(eq: Equivalence.Equivalence<A>): {
1087
- <R, E>(ref: RefSubject<R, E, A> | Computed<R, E, A>): Computed<R, E, A>
1088
- <R, E>(ref: Filtered<R, E, A>): Filtered<R, E, A>
1096
+ <E, R>(ref: RefSubject<A, E, R> | Computed<A, E, R>): Computed<A, E, R>
1097
+ <E, R>(ref: Filtered<A, E, R>): Filtered<A, E, R>
1089
1098
  }
1090
1099
 
1091
- <R, E, A>(
1092
- ref: RefSubject<R, E, A> | Computed<R, E, A>,
1100
+ <A, E, R>(
1101
+ ref: RefSubject<A, E, R> | Computed<A, E, R>,
1093
1102
  eq: Equivalence.Equivalence<A>
1094
- ): Computed<R, E, A>
1095
- <R, E, A>(
1096
- ref: Filtered<R, E, A>,
1103
+ ): Computed<A, E, R>
1104
+ <A, E, R>(
1105
+ ref: Filtered<A, E, R>,
1097
1106
  eq: Equivalence.Equivalence<A>
1098
- ): Filtered<R, E, A>
1107
+ ): Filtered<A, E, R>
1099
1108
 
1100
- <R, E, A>(
1101
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>,
1109
+ <A, E, R>(
1110
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
1102
1111
  eq: Equivalence.Equivalence<A>
1103
- ): Computed<R, E, A> | Filtered<R, E, A>
1104
- } = dual(2, function skipRepeatsWith<R, E, A>(
1105
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>,
1112
+ ): Computed<A, E, R> | Filtered<A, E, R>
1113
+ } = dual(2, function skipRepeatsWith<A, E, R>(
1114
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
1106
1115
  eq: Equivalence.Equivalence<A>
1107
- ): Computed<R, E, A> | Filtered<R, E, A> {
1116
+ ): Computed<A, E, R> | Filtered<A, E, R> {
1108
1117
  const versioned = Versioned.transform(ref, (fx) => core.skipRepeatsWith(fx, eq), identity)
1109
1118
 
1110
1119
  if (FilteredTypeId in ref) {
@@ -1117,58 +1126,58 @@ export const skipRepeatsWith: {
1117
1126
  /**
1118
1127
  * @since 1.20.0
1119
1128
  */
1120
- export function skipRepeats<R, E, A>(
1121
- ref: RefSubject<R, E, A> | Computed<R, E, A>
1122
- ): Computed<R, E, A>
1129
+ export function skipRepeats<A, E, R>(
1130
+ ref: RefSubject<A, E, R> | Computed<A, E, R>
1131
+ ): Computed<A, E, R>
1123
1132
 
1124
- export function skipRepeats<R, E, A>(
1125
- ref: Filtered<R, E, A>
1126
- ): Filtered<R, E, A>
1133
+ export function skipRepeats<A, E, R>(
1134
+ ref: Filtered<A, E, R>
1135
+ ): Filtered<A, E, R>
1127
1136
 
1128
- export function skipRepeats<R, E, A>(
1129
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>
1130
- ): Computed<R, E, A> | Filtered<R, E, A>
1137
+ export function skipRepeats<A, E, R>(
1138
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>
1139
+ ): Computed<A, E, R> | Filtered<A, E, R>
1131
1140
 
1132
- export function skipRepeats<R, E, A>(
1133
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>
1134
- ): Computed<R, E, A> | Filtered<R, E, A> {
1141
+ export function skipRepeats<A, E, R>(
1142
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>
1143
+ ): Computed<A, E, R> | Filtered<A, E, R> {
1135
1144
  return skipRepeatsWith(ref, Equal.equals)
1136
1145
  }
1137
1146
 
1138
1147
  /**
1139
1148
  * @since 1.20.0
1140
1149
  */
1141
- export function transform<R, E, A, B>(
1142
- ref: RefSubject<R, E, A>,
1150
+ export function transform<A, E, R, B>(
1151
+ ref: RefSubject<A, E, R>,
1143
1152
  from: (a: A) => B,
1144
1153
  to: (b: B) => A
1145
- ): RefSubject<R, E, B> {
1154
+ ): RefSubject<B, E, R> {
1146
1155
  return new RefSubjectTransform(ref, from, to)
1147
1156
  }
1148
1157
 
1149
1158
  /**
1150
1159
  * @since 1.20.0
1151
1160
  */
1152
- export function transformOrFail<R, E, R2, E2, A, R3, E3, B>(
1153
- ref: RefSubject<R, E, A>,
1154
- from: (a: A) => Effect.Effect<R2, E2, B>,
1155
- to: (b: B) => Effect.Effect<R3, E3, A>
1156
- ): RefSubject<R | R2 | R3, E | E2 | E3, B> {
1161
+ export function transformOrFail<R, E, A, E2, R2, R3, E3, B>(
1162
+ ref: RefSubject<A, E, R>,
1163
+ from: (a: A) => Effect.Effect<B, E2, R2>,
1164
+ to: (b: B) => Effect.Effect<A, E3, R3>
1165
+ ): RefSubject<B, E | E2 | E3, R | R2 | R3> {
1157
1166
  return new RefSubjectTransformEffect(ref, from, to)
1158
1167
  }
1159
1168
 
1160
- class RefSubjectTransform<R, E, A, B> extends FxEffectBase<R | Scope.Scope, E, B, R, E, B>
1161
- implements RefSubject<R, E, B>
1169
+ class RefSubjectTransform<A, E, R, B> extends FxEffectBase<B, E, R | Scope.Scope, B, E, R>
1170
+ implements RefSubject<B, E, R>
1162
1171
  {
1163
1172
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1164
1173
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
1165
1174
 
1166
- readonly version: Effect.Effect<R, E, number>
1167
- readonly interrupt: Effect.Effect<R, never, void>
1168
- readonly subscriberCount: Effect.Effect<R, never, number>
1175
+ readonly version: Effect.Effect<number, E, R>
1176
+ readonly interrupt: Effect.Effect<void, never, R>
1177
+ readonly subscriberCount: Effect.Effect<number, never, R>
1169
1178
 
1170
1179
  constructor(
1171
- readonly ref: RefSubject<R, E, A>,
1180
+ readonly ref: RefSubject<A, E, R>,
1172
1181
  readonly from: (a: A) => B,
1173
1182
  readonly to: (b: B) => A
1174
1183
  ) {
@@ -1179,12 +1188,12 @@ class RefSubjectTransform<R, E, A, B> extends FxEffectBase<R | Scope.Scope, E, B
1179
1188
  this.subscriberCount = ref.subscriberCount
1180
1189
  }
1181
1190
 
1182
- run<R2 = never>(sink: Sink.Sink<R2, E, B>): Effect.Effect<R | Scope.Scope | R2, never, unknown> {
1191
+ run<R2 = never>(sink: Sink.Sink<B, E, R2>): Effect.Effect<unknown, never, R | Scope.Scope | R2> {
1183
1192
  return this.ref.run(Sink.map(sink, this.from))
1184
1193
  }
1185
1194
 
1186
- runUpdates<R2, E2, C>(
1187
- run: (ref: GetSetDelete<R, E, B>) => Effect.Effect<R2, E2, C>
1195
+ runUpdates<E2, R2, C>(
1196
+ run: (ref: GetSetDelete<B, E, R>) => Effect.Effect<C, E2, R2>
1188
1197
  ) {
1189
1198
  return this.ref.runUpdates((ref) =>
1190
1199
  run({
@@ -1195,35 +1204,35 @@ class RefSubjectTransform<R, E, A, B> extends FxEffectBase<R | Scope.Scope, E, B
1195
1204
  )
1196
1205
  }
1197
1206
 
1198
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
1207
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
1199
1208
  return this.ref.onFailure(cause)
1200
1209
  }
1201
1210
 
1202
- onSuccess(value: B): Effect.Effect<R, never, unknown> {
1211
+ onSuccess(value: B): Effect.Effect<unknown, never, R> {
1203
1212
  return this.ref.onSuccess(this.to(value))
1204
1213
  }
1205
1214
 
1206
- toEffect(): Effect.Effect<R, E, B> {
1215
+ toEffect(): Effect.Effect<B, E, R> {
1207
1216
  return Effect.map(this.ref, this.from)
1208
1217
  }
1209
1218
  }
1210
1219
 
1211
- class RefSubjectTransformEffect<R, E, A, R2, E2, B, R3, E3>
1212
- extends FxEffectBase<R | R2 | R3 | Scope.Scope, E | E2 | E3, B, R | R2 | R3, E | E2, B>
1213
- implements RefSubject<R | R2 | R3, E | E2 | E3, B>
1220
+ class RefSubjectTransformEffect<A, E, R, B, E2, R2, R3, E3>
1221
+ extends FxEffectBase<B, E | E2 | E3, R | R2 | R3 | Scope.Scope, B, E | E2, R | R2 | R3>
1222
+ implements RefSubject<B, E | E2 | E3, R | R2 | R3>
1214
1223
  {
1215
1224
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1216
1225
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
1217
1226
 
1218
- readonly version: Effect.Effect<R, E, number>
1219
- readonly interrupt: Effect.Effect<R, never, void>
1220
- readonly subscriberCount: Effect.Effect<R, never, number>
1221
- readonly subject: Subject.Subject<never, E | E2 | E3, B>
1227
+ readonly version: Effect.Effect<number, E, R>
1228
+ readonly interrupt: Effect.Effect<void, never, R>
1229
+ readonly subscriberCount: Effect.Effect<number, never, R>
1230
+ readonly subject: Subject.Subject<B, E | E2 | E3>
1222
1231
 
1223
1232
  constructor(
1224
- readonly ref: RefSubject<R, E, A>,
1225
- readonly from: (a: A) => Effect.Effect<R2, E2, B>,
1226
- readonly to: (b: B) => Effect.Effect<R3, E3, A>
1233
+ readonly ref: RefSubject<A, E, R>,
1234
+ readonly from: (a: A) => Effect.Effect<B, E2, R2>,
1235
+ readonly to: (b: B) => Effect.Effect<A, E3, R3>
1227
1236
  ) {
1228
1237
  super()
1229
1238
 
@@ -1233,12 +1242,12 @@ class RefSubjectTransformEffect<R, E, A, R2, E2, B, R3, E3>
1233
1242
  this.subject = Subject.unsafeMake()
1234
1243
  }
1235
1244
 
1236
- run<R4 = never>(sink: Sink.Sink<R4, E | E2 | E3, B>): Effect.Effect<R | R2 | R3 | Scope.Scope | R4, never, unknown> {
1245
+ run<R4 = never>(sink: Sink.Sink<B, E | E2 | E3, R4>): Effect.Effect<unknown, never, R | R2 | R3 | Scope.Scope | R4> {
1237
1246
  return core.merge(core.mapEffect(this.ref, this.from), this.subject).run(sink)
1238
1247
  }
1239
1248
 
1240
1249
  runUpdates<R4, E4, C>(
1241
- run: (ref: GetSetDelete<R | R2 | R3, E | E2 | E3, B>) => Effect.Effect<R4, E4, C>
1250
+ run: (ref: GetSetDelete<B, E | E2 | E3, R | R2 | R3>) => Effect.Effect<C, E4, R4>
1242
1251
  ) {
1243
1252
  return this.ref.runUpdates((ref) =>
1244
1253
  run({
@@ -1259,18 +1268,18 @@ class RefSubjectTransformEffect<R, E, A, R2, E2, B, R3, E3>
1259
1268
  )
1260
1269
  }
1261
1270
 
1262
- onFailure(cause: Cause.Cause<E | E2 | E3>): Effect.Effect<R, never, unknown> {
1271
+ onFailure(cause: Cause.Cause<E | E2 | E3>): Effect.Effect<unknown, never, R> {
1263
1272
  return this.subject.onFailure(cause)
1264
1273
  }
1265
1274
 
1266
- onSuccess(value: B): Effect.Effect<R | R3, never, unknown> {
1275
+ onSuccess(value: B): Effect.Effect<unknown, never, R | R3> {
1267
1276
  return Effect.matchCauseEffect(this.to(value), {
1268
1277
  onFailure: (cause) => this.subject.onFailure(cause),
1269
1278
  onSuccess: (a) => this.ref.onSuccess(a)
1270
1279
  })
1271
1280
  }
1272
1281
 
1273
- toEffect(): Effect.Effect<R | R2, E | E2, B> {
1282
+ toEffect(): Effect.Effect<B, E | E2, R | R2> {
1274
1283
  return Effect.flatMap(this.ref, this.from)
1275
1284
  }
1276
1285
  }
@@ -1325,9 +1334,9 @@ function getRefKind<
1325
1334
  export type TupleFrom<
1326
1335
  Refs extends ReadonlyArray<RefSubject<any, any, any> | Computed<any, any, any> | Filtered<any, any, any>>
1327
1336
  > = {
1328
- "c": [ComputedTupleFrom<Refs>] extends [Computed<infer R, infer E, infer A>] ? Computed<R, E, A> : never
1329
- "f": [FilteredTupleFrom<Refs>] extends [Filtered<infer R, infer E, infer A>] ? Filtered<R, E, A> : never
1330
- "r": [RefSubjectTupleFrom<Refs>] extends [RefSubject<infer R, infer E, infer A>] ? RefSubject<R, E, A> : never
1337
+ "c": [ComputedTupleFrom<Refs>] extends [Computed<infer A, infer E, infer R>] ? Computed<A, E, R> : never
1338
+ "f": [FilteredTupleFrom<Refs>] extends [Filtered<infer A, infer E, infer R>] ? Filtered<A, E, R> : never
1339
+ "r": [RefSubjectTupleFrom<Refs>] extends [RefSubject<infer A, infer E, infer R>] ? RefSubject<A, E, R> : never
1331
1340
  }[GetTupleKind<Refs>]
1332
1341
 
1333
1342
  type Ref = RefSubject.Any | Computed.Any | Filtered.Any
@@ -1356,31 +1365,31 @@ type MergeKind<A extends RefKind, B extends RefKind> = A extends "f" ? A
1356
1365
  type FilteredTupleFrom<
1357
1366
  Refs extends ReadonlyArray<RefSubject<any, any, any> | Computed<any, any, any> | Filtered<any, any, any>>
1358
1367
  > = Filtered<
1359
- Effect.Effect.Context<Refs[number]>,
1360
- Fx.Error<Refs[number]>,
1361
1368
  {
1362
1369
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1363
- }
1370
+ },
1371
+ Fx.Error<Refs[number]>,
1372
+ Effect.Effect.Context<Refs[number]>
1364
1373
  >
1365
1374
 
1366
1375
  type ComputedTupleFrom<
1367
1376
  Refs extends ReadonlyArray<RefSubject<any, any, any> | Computed<any, any, any> | Filtered<any, any, any>>
1368
1377
  > = Computed<
1369
- Effect.Effect.Context<Refs[number]>,
1370
- Effect.Effect.Error<Refs[number]>,
1371
1378
  {
1372
1379
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1373
- }
1380
+ },
1381
+ Effect.Effect.Error<Refs[number]>,
1382
+ Effect.Effect.Context<Refs[number]>
1374
1383
  >
1375
1384
 
1376
1385
  type RefSubjectTupleFrom<
1377
1386
  Refs extends ReadonlyArray<RefSubject<any, any, any> | Computed<any, any, any> | Filtered<any, any, any>>
1378
1387
  > = RefSubject<
1379
- Effect.Effect.Context<Refs[number]>,
1380
- Effect.Effect.Error<Refs[number]>,
1381
1388
  {
1382
1389
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1383
- }
1390
+ },
1391
+ Effect.Effect.Error<Refs[number]>,
1392
+ Effect.Effect.Context<Refs[number]>
1384
1393
  >
1385
1394
 
1386
1395
  function makeTupleRef<
@@ -1392,39 +1401,39 @@ function makeTupleRef<
1392
1401
  class RefSubjectTuple<
1393
1402
  const Refs extends ReadonlyArray<RefSubject<any, any, any>>
1394
1403
  > extends FxEffectBase<
1395
- Effect.Effect.Context<Refs[number]>,
1396
- Effect.Effect.Error<Refs[number]>,
1397
1404
  {
1398
1405
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1399
1406
  },
1400
- Effect.Effect.Context<Refs[number]>,
1401
1407
  Effect.Effect.Error<Refs[number]>,
1408
+ Effect.Effect.Context<Refs[number]>,
1402
1409
  {
1403
1410
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1404
- }
1411
+ },
1412
+ Effect.Effect.Error<Refs[number]>,
1413
+ Effect.Effect.Context<Refs[number]>
1405
1414
  > implements RefSubjectTupleFrom<Refs> {
1406
1415
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1407
1416
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
1408
1417
 
1409
- readonly version: Effect.Effect<Effect.Effect.Context<Refs[number]>, Effect.Effect.Error<Refs[number]>, number>
1410
- readonly interrupt: Effect.Effect<Effect.Effect.Context<Refs[number]>, never, void>
1411
- readonly subscriberCount: Effect.Effect<Effect.Effect.Context<Refs[number]>, never, number>
1418
+ readonly version: Effect.Effect<number, Effect.Effect.Error<Refs[number]>, Effect.Effect.Context<Refs[number]>>
1419
+ readonly interrupt: Effect.Effect<void, never, Effect.Effect.Context<Refs[number]>>
1420
+ readonly subscriberCount: Effect.Effect<number, never, Effect.Effect.Context<Refs[number]>>
1412
1421
 
1413
1422
  private versioned: Versioned.Versioned<
1414
- Effect.Effect.Context<Refs[number]>,
1415
- Effect.Effect.Error<Refs[number]>,
1416
1423
  Effect.Effect.Context<Refs[number]>,
1417
1424
  Effect.Effect.Error<Refs[number]>,
1418
1425
  { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1426
+ Effect.Effect.Error<Refs[number]>,
1419
1427
  Effect.Effect.Context<Refs[number]>,
1428
+ { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1420
1429
  Effect.Effect.Error<Refs[number]>,
1421
- { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1430
+ Effect.Effect.Context<Refs[number]>
1422
1431
  >
1423
1432
 
1424
1433
  private getSetDelete: GetSetDelete<
1425
- Effect.Effect.Context<Refs[number]>,
1434
+ { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1426
1435
  Effect.Effect.Error<Refs[number]>,
1427
- { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1436
+ Effect.Effect.Context<Refs[number]>
1428
1437
  >
1429
1438
 
1430
1439
  constructor(
@@ -1453,47 +1462,47 @@ class RefSubjectTuple<
1453
1462
 
1454
1463
  run<R2 = never>(
1455
1464
  sink: Sink.Sink<
1456
- R2,
1457
- Effect.Effect.Error<Refs[number]>,
1458
1465
  {
1459
1466
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1460
- }
1467
+ },
1468
+ Effect.Effect.Error<Refs[number]>,
1469
+ R2
1461
1470
  >
1462
- ): Effect.Effect<Effect.Effect.Context<Refs[number]> | R2, never, unknown> {
1471
+ ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[number]> | R2> {
1463
1472
  return this.versioned.run(sink)
1464
1473
  }
1465
1474
 
1466
1475
  toEffect(): Effect.Effect<
1467
- Effect.Effect.Context<Refs[number]>,
1476
+ { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1468
1477
  Effect.Effect.Error<Refs[number]>,
1469
- { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1478
+ Effect.Effect.Context<Refs[number]>
1470
1479
  > {
1471
1480
  return this.versioned
1472
1481
  }
1473
1482
 
1474
- runUpdates<R2, E2, C>(
1483
+ runUpdates<E2, R2, C>(
1475
1484
  run: (
1476
1485
  ref: GetSetDelete<
1477
- Effect.Effect.Context<Refs[number]>,
1478
- Effect.Effect.Error<Refs[number]>,
1479
1486
  {
1480
1487
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1481
- }
1488
+ },
1489
+ Effect.Effect.Error<Refs[number]>,
1490
+ Effect.Effect.Context<Refs[number]>
1482
1491
  >
1483
- ) => Effect.Effect<R2, E2, C>
1492
+ ) => Effect.Effect<C, E2, R2>
1484
1493
  ) {
1485
1494
  return run(this.getSetDelete)
1486
1495
  }
1487
1496
 
1488
1497
  onFailure(
1489
1498
  cause: Cause.Cause<Effect.Effect.Error<Refs[number]>>
1490
- ): Effect.Effect<Effect.Effect.Context<Refs[number]>, never, unknown> {
1499
+ ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[number]>> {
1491
1500
  return Effect.all(this.refs.map((ref) => ref.onFailure(cause)))
1492
1501
  }
1493
1502
 
1494
1503
  onSuccess(
1495
1504
  value: { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1496
- ): Effect.Effect<Effect.Effect.Context<Refs[number]>, never, unknown> {
1505
+ ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[number]>> {
1497
1506
  return Effect.catchAllCause(this.getSetDelete.set(value), (c) => this.onFailure(c))
1498
1507
  }
1499
1508
  }
@@ -1536,51 +1545,51 @@ function makeStructRef<
1536
1545
  class RefSubjectStruct<
1537
1546
  const Refs extends Readonly<Record<string, RefSubject.Any>>
1538
1547
  > extends FxEffectBase<
1539
- Effect.Effect.Context<Refs[keyof Refs]> | Scope.Scope,
1540
- Effect.Effect.Error<Refs[keyof Refs]>,
1541
1548
  {
1542
1549
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1543
1550
  },
1544
- Effect.Effect.Context<Refs[keyof Refs]>,
1545
1551
  Effect.Effect.Error<Refs[keyof Refs]>,
1552
+ Effect.Effect.Context<Refs[keyof Refs]> | Scope.Scope,
1546
1553
  {
1547
1554
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1548
- }
1555
+ },
1556
+ Effect.Effect.Error<Refs[keyof Refs]>,
1557
+ Effect.Effect.Context<Refs[keyof Refs]>
1549
1558
  > implements
1550
1559
  RefSubject<
1551
- Effect.Effect.Context<Refs[keyof Refs]>,
1552
- Effect.Effect.Error<Refs[keyof Refs]>,
1553
1560
  {
1554
1561
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1555
- }
1562
+ },
1563
+ Effect.Effect.Error<Refs[keyof Refs]>,
1564
+ Effect.Effect.Context<Refs[keyof Refs]>
1556
1565
  >
1557
1566
  {
1558
1567
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1559
1568
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
1560
1569
 
1561
1570
  readonly version: Effect.Effect<
1562
- Effect.Effect.Context<Refs[keyof Refs]>,
1571
+ number,
1563
1572
  Effect.Effect.Error<Refs[keyof Refs]>,
1564
- number
1573
+ Effect.Effect.Context<Refs[keyof Refs]>
1565
1574
  >
1566
- readonly interrupt: Effect.Effect<Effect.Effect.Context<Refs[keyof Refs]>, never, void>
1567
- readonly subscriberCount: Effect.Effect<Effect.Effect.Context<Refs[keyof Refs]>, never, number>
1575
+ readonly interrupt: Effect.Effect<void, never, Effect.Effect.Context<Refs[keyof Refs]>>
1576
+ readonly subscriberCount: Effect.Effect<number, never, Effect.Effect.Context<Refs[keyof Refs]>>
1568
1577
 
1569
1578
  private versioned: Versioned.Versioned<
1570
- Effect.Effect.Context<Refs[keyof Refs]>,
1571
- Effect.Effect.Error<Refs[keyof Refs]>,
1572
1579
  Effect.Effect.Context<Refs[keyof Refs]>,
1573
1580
  Effect.Effect.Error<Refs[keyof Refs]>,
1574
1581
  { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1582
+ Effect.Effect.Error<Refs[keyof Refs]>,
1575
1583
  Effect.Effect.Context<Refs[keyof Refs]>,
1584
+ { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1576
1585
  Effect.Effect.Error<Refs[keyof Refs]>,
1577
- { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1586
+ Effect.Effect.Context<Refs[keyof Refs]>
1578
1587
  >
1579
1588
 
1580
1589
  private getSetDelete: GetSetDelete<
1581
- Effect.Effect.Context<Refs[keyof Refs]>,
1590
+ { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1582
1591
  Effect.Effect.Error<Refs[keyof Refs]>,
1583
- { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1592
+ Effect.Effect.Context<Refs[keyof Refs]>
1584
1593
  >
1585
1594
 
1586
1595
  constructor(
@@ -1609,45 +1618,45 @@ class RefSubjectStruct<
1609
1618
 
1610
1619
  run<R3 = never>(
1611
1620
  sink: Sink.Sink<
1612
- R3,
1621
+ { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1613
1622
  Effect.Effect.Error<Refs[keyof Refs]>,
1614
- { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1623
+ R3
1615
1624
  >
1616
- ): Effect.Effect<Effect.Effect.Context<Refs[keyof Refs]> | R3, never, unknown> {
1625
+ ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[keyof Refs]> | R3> {
1617
1626
  return this.versioned.run(sink)
1618
1627
  }
1619
1628
 
1620
1629
  toEffect(): Effect.Effect<
1621
- Effect.Effect.Context<Refs[keyof Refs]>,
1630
+ { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> },
1622
1631
  Effect.Effect.Error<Refs[keyof Refs]>,
1623
- { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1632
+ Effect.Effect.Context<Refs[keyof Refs]>
1624
1633
  > {
1625
1634
  return this.versioned
1626
1635
  }
1627
1636
 
1628
- runUpdates<R2, E2, C>(
1637
+ runUpdates<E2, R2, C>(
1629
1638
  run: (
1630
1639
  ref: GetSetDelete<
1631
- Effect.Effect.Context<Refs[keyof Refs]>,
1632
- Effect.Effect.Error<Refs[keyof Refs]>,
1633
1640
  {
1634
1641
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1635
- }
1642
+ },
1643
+ Effect.Effect.Error<Refs[keyof Refs]>,
1644
+ Effect.Effect.Context<Refs[keyof Refs]>
1636
1645
  >
1637
- ) => Effect.Effect<R2, E2, C>
1646
+ ) => Effect.Effect<C, E2, R2>
1638
1647
  ) {
1639
1648
  return run(this.getSetDelete)
1640
1649
  }
1641
1650
 
1642
1651
  onFailure(
1643
1652
  cause: Cause.Cause<Effect.Effect.Error<Refs[keyof Refs]>>
1644
- ): Effect.Effect<Effect.Effect.Context<Refs[keyof Refs]>, never, unknown> {
1653
+ ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[keyof Refs]>> {
1645
1654
  return Effect.all(Object.values(this.refs).map((ref) => ref.onFailure(cause as any)))
1646
1655
  }
1647
1656
 
1648
1657
  onSuccess(
1649
1658
  value: { readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }
1650
- ): Effect.Effect<Effect.Effect.Context<Refs[keyof Refs]>, never, unknown> {
1659
+ ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[keyof Refs]>> {
1651
1660
  return Effect.catchAllCause(this.getSetDelete.set(value), (c) => this.onFailure(c))
1652
1661
  }
1653
1662
  }
@@ -1667,9 +1676,9 @@ function makeStructFiltered<
1667
1676
  type StructFrom<
1668
1677
  Refs extends Readonly<Record<string, RefSubject.Any | Computed.Any | Filtered.Any>>
1669
1678
  > = {
1670
- "c": [ComputedStructFrom<Refs>] extends [Computed<infer R, infer E, infer A>] ? Computed<R, E, A> : never
1671
- "f": [FilteredStructFrom<Refs>] extends [Filtered<infer R, infer E, infer A>] ? Filtered<R, E, A> : never
1672
- "r": [RefSubjectStructFrom<Refs>] extends [RefSubject<infer R, infer E, infer A>] ? RefSubject<R, E, A> : never
1679
+ "c": [ComputedStructFrom<Refs>] extends [Computed<infer A, infer E, infer R>] ? Computed<A, E, R> : never
1680
+ "f": [FilteredStructFrom<Refs>] extends [Filtered<infer A, infer E, infer R>] ? Filtered<A, E, R> : never
1681
+ "r": [RefSubjectStructFrom<Refs>] extends [RefSubject<infer A, infer E, infer R>] ? RefSubject<A, E, R> : never
1673
1682
  }[GetStructKind<Refs>]
1674
1683
 
1675
1684
  /**
@@ -1693,31 +1702,31 @@ type MergeKinds<Kinds extends ReadonlyArray<any>> = Kinds extends
1693
1702
  type FilteredStructFrom<
1694
1703
  Refs extends Readonly<Record<string, RefSubject.Any | Computed.Any | Filtered.Any>>
1695
1704
  > = Filtered<
1696
- Effect.Effect.Context<Refs[keyof Refs]>,
1697
- Fx.Error<Refs[keyof Refs]>,
1698
1705
  {
1699
1706
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1700
- }
1707
+ },
1708
+ Fx.Error<Refs[keyof Refs]>,
1709
+ Effect.Effect.Context<Refs[keyof Refs]>
1701
1710
  >
1702
1711
 
1703
1712
  type ComputedStructFrom<
1704
1713
  Refs extends Readonly<Record<string, RefSubject.Any | Computed.Any | Filtered.Any>>
1705
1714
  > = Computed<
1706
- Effect.Effect.Context<Refs[keyof Refs]>,
1707
- Effect.Effect.Error<Refs[keyof Refs]>,
1708
1715
  {
1709
1716
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1710
- }
1717
+ },
1718
+ Effect.Effect.Error<Refs[keyof Refs]>,
1719
+ Effect.Effect.Context<Refs[keyof Refs]>
1711
1720
  >
1712
1721
 
1713
1722
  type RefSubjectStructFrom<
1714
1723
  Refs extends Readonly<Record<string, RefSubject.Any | Computed.Any | Filtered.Any>>
1715
1724
  > = RefSubject<
1716
- Effect.Effect.Context<Refs[keyof Refs]>,
1717
- Effect.Effect.Error<Refs[keyof Refs]>,
1718
1725
  {
1719
1726
  readonly [K in keyof Refs]: Effect.Effect.Success<Refs[K]>
1720
- }
1727
+ },
1728
+ Effect.Effect.Error<Refs[keyof Refs]>,
1729
+ Effect.Effect.Context<Refs[keyof Refs]>
1721
1730
  >
1722
1731
 
1723
1732
  /**
@@ -1727,26 +1736,26 @@ export function tagged<E, A>(replay?: number): {
1727
1736
  <const I extends C.IdentifierFactory<any>>(identifier: I): RefSubject.Tagged<C.IdentifierOf<I>, E, A>
1728
1737
  <const I>(identifier: I): RefSubject.Tagged<C.IdentifierOf<I>, E, A>
1729
1738
  } {
1730
- return <const I>(identifier: I) => new RefSubjectTagged(C.Tagged<I, RefSubject<never, E, A>>(identifier), replay)
1739
+ return <const I>(identifier: I) => new RefSubjectTagged(C.Tagged<I, RefSubject<A, E>>(identifier), replay)
1731
1740
  }
1732
1741
 
1733
1742
  class RefSubjectTagged<I, E, A> extends FxEffectBase<
1734
- I | Scope.Scope,
1743
+ A,
1735
1744
  E,
1745
+ I | Scope.Scope,
1736
1746
  A,
1737
- I,
1738
1747
  E,
1739
- A
1748
+ I
1740
1749
  > implements RefSubject.Tagged<I, E, A> {
1741
1750
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1742
1751
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
1743
1752
 
1744
- readonly version: Effect.Effect<I, E, number>
1745
- readonly interrupt: Effect.Effect<I, never, void>
1746
- readonly subscriberCount: Effect.Effect<I, never, number>
1753
+ readonly version: Effect.Effect<number, E, I>
1754
+ readonly interrupt: Effect.Effect<void, never, I>
1755
+ readonly subscriberCount: Effect.Effect<number, never, I>
1747
1756
 
1748
1757
  constructor(
1749
- readonly tag: C.Tagged<I, RefSubject<never, E, A>>,
1758
+ readonly tag: C.Tagged<I, RefSubject<A, E>>,
1750
1759
  readonly replay: number = 0
1751
1760
  ) {
1752
1761
  super()
@@ -1761,66 +1770,66 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
1761
1770
  }
1762
1771
 
1763
1772
  run<R2 = never>(
1764
- sink: Sink.Sink<R2, E, A>
1765
- ): Effect.Effect<I | R2 | Scope.Scope, never, unknown> {
1773
+ sink: Sink.Sink<A, E, R2>
1774
+ ): Effect.Effect<unknown, never, I | R2 | Scope.Scope> {
1766
1775
  return this.tag.withEffect((ref) => ref.run(sink))
1767
1776
  }
1768
1777
 
1769
- toEffect(): Effect.Effect<I, E, A> {
1778
+ toEffect(): Effect.Effect<A, E, I> {
1770
1779
  return this.tag.withEffect((ref) => ref)
1771
1780
  }
1772
1781
 
1773
- runUpdates<R2, E2, C>(
1774
- run: (ref: GetSetDelete<I, E, A>) => Effect.Effect<R2, E2, C>
1775
- ): Effect.Effect<I | R2, E2, C> {
1782
+ runUpdates<E2, R2, C>(
1783
+ run: (ref: GetSetDelete<A, E, I>) => Effect.Effect<C, E2, R2>
1784
+ ): Effect.Effect<C, E2, I | R2> {
1776
1785
  return this.tag.withEffect((ref) => ref.runUpdates(run))
1777
1786
  }
1778
1787
 
1779
- onFailure(cause: Cause.Cause<E>): Effect.Effect<I, never, unknown> {
1788
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, I> {
1780
1789
  return this.tag.withEffect((ref) => ref.onFailure(cause))
1781
1790
  }
1782
1791
 
1783
- onSuccess(value: A): Effect.Effect<I, never, unknown> {
1792
+ onSuccess(value: A): Effect.Effect<unknown, never, I> {
1784
1793
  return this.tag.withEffect((ref) => ref.onSuccess(value))
1785
1794
  }
1786
1795
 
1787
1796
  make = <R>(
1788
- fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>,
1797
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R>,
1789
1798
  options?: RefSubjectOptions<A>
1790
- ): Layer.Layer<R, never, I> => this.tag.scoped(make(fxOrEffect, options))
1799
+ ): Layer.Layer<I, never, R> => this.tag.scoped(make(fxOrEffect, options))
1791
1800
  }
1792
1801
 
1793
1802
  /**
1794
1803
  * @since 1.20.0
1795
1804
  */
1796
- export function fromTag<I, S, R, E, A>(
1805
+ export function fromTag<I, S, A, E, R>(
1797
1806
  tag: C.Tag<I, S>,
1798
- f: (s: S) => RefSubject<R, E, A>
1799
- ): RefSubject<I | R, E, A> {
1807
+ f: (s: S) => RefSubject<A, E, R>
1808
+ ): RefSubject<A, E, I | R> {
1800
1809
  return new RefSubjectFromTag(tag, f)
1801
1810
  }
1802
1811
 
1803
- class RefSubjectFromTag<I, S, R, E, A> extends FxEffectBase<
1804
- I | R | Scope.Scope,
1812
+ class RefSubjectFromTag<I, S, A, E, R> extends FxEffectBase<
1813
+ A,
1805
1814
  E,
1815
+ I | R | Scope.Scope,
1806
1816
  A,
1807
- I | R,
1808
1817
  E,
1809
- A
1810
- > implements RefSubject<I | R, E, A> {
1818
+ I | R
1819
+ > implements RefSubject<A, E, R | I> {
1811
1820
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1812
1821
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
1813
1822
 
1814
- readonly version: Effect.Effect<I | R, E, number>
1815
- readonly interrupt: Effect.Effect<I | R, never, void>
1816
- readonly subscriberCount: Effect.Effect<I | R, never, number>
1823
+ readonly version: Effect.Effect<number, E, I | R>
1824
+ readonly interrupt: Effect.Effect<void, never, I | R>
1825
+ readonly subscriberCount: Effect.Effect<number, never, I | R>
1817
1826
 
1818
- private _get: Effect.Effect<I, never, RefSubject<R, E, A>>
1819
- private _fx: Fx<I | R | Scope.Scope, E, A>
1827
+ private _get: Effect.Effect<RefSubject<A, E, R>, never, I>
1828
+ private _fx: Fx<A, E, I | R | Scope.Scope>
1820
1829
 
1821
1830
  constructor(
1822
1831
  readonly tag: C.Tag<I, S>,
1823
- readonly f: (s: S) => RefSubject<R, E, A>
1832
+ readonly f: (s: S) => RefSubject<A, E, R>
1824
1833
  ) {
1825
1834
  super()
1826
1835
 
@@ -1832,25 +1841,25 @@ class RefSubjectFromTag<I, S, R, E, A> extends FxEffectBase<
1832
1841
  this.subscriberCount = Effect.flatMap(this._get, (ref) => ref.subscriberCount)
1833
1842
  }
1834
1843
 
1835
- run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<I | R | R3 | Scope.Scope, never, unknown> {
1844
+ run<R3>(sink: Sink.Sink<A, E, R3>): Effect.Effect<unknown, never, I | R | R3 | Scope.Scope> {
1836
1845
  return this._fx.run(sink)
1837
1846
  }
1838
1847
 
1839
- toEffect(): Effect.Effect<I | R, E, A> {
1848
+ toEffect(): Effect.Effect<A, E, I | R> {
1840
1849
  return Effect.flatten(this._get)
1841
1850
  }
1842
1851
 
1843
- runUpdates<R2, E2, C>(
1844
- run: (ref: GetSetDelete<I | R, E, A>) => Effect.Effect<R2, E2, C>
1845
- ): Effect.Effect<I | R | R2, E2, C> {
1852
+ runUpdates<E2, R2, C>(
1853
+ run: (ref: GetSetDelete<A, E, R | I>) => Effect.Effect<C, E2, R2>
1854
+ ): Effect.Effect<C, E2, I | R | R2> {
1846
1855
  return Effect.flatMap(this._get, (ref) => ref.runUpdates(run))
1847
1856
  }
1848
1857
 
1849
- onFailure(cause: Cause.Cause<E>): Effect.Effect<I | R, never, unknown> {
1858
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, I | R> {
1850
1859
  return Effect.flatMap(this._get, (ref) => ref.onFailure(cause))
1851
1860
  }
1852
1861
 
1853
- onSuccess(value: A): Effect.Effect<I | R, never, unknown> {
1862
+ onSuccess(value: A): Effect.Effect<unknown, never, I | R> {
1854
1863
  return Effect.flatMap(this._get, (ref) => ref.onSuccess(value))
1855
1864
  }
1856
1865
  }
@@ -1858,7 +1867,7 @@ class RefSubjectFromTag<I, S, R, E, A> extends FxEffectBase<
1858
1867
  /**
1859
1868
  * @since 1.20.0
1860
1869
  */
1861
- export function isRefSubject<R, E, A>(u: unknown): u is RefSubject<R, E, A>
1870
+ export function isRefSubject<A, E, R>(u: unknown): u is RefSubject<A, E, R>
1862
1871
  export function isRefSubject(u: unknown): u is RefSubject.Any
1863
1872
  export function isRefSubject(u: unknown): u is RefSubject.Any {
1864
1873
  return isObjectLike(u) && RefSubjectTypeId in u
@@ -1867,7 +1876,7 @@ export function isRefSubject(u: unknown): u is RefSubject.Any {
1867
1876
  /**
1868
1877
  * @since 1.20.0
1869
1878
  */
1870
- export function isComputed<R, E, A>(u: unknown): u is Computed<R, E, A>
1879
+ export function isComputed<A, E, R>(u: unknown): u is Computed<A, E, R>
1871
1880
  export function isComputed(u: unknown): u is Computed.Any
1872
1881
  export function isComputed(u: unknown): u is Computed.Any {
1873
1882
  return isObjectLike(u) && ComputedTypeId in u
@@ -1876,7 +1885,7 @@ export function isComputed(u: unknown): u is Computed.Any {
1876
1885
  /**
1877
1886
  * @since 1.20.0
1878
1887
  */
1879
- export function isFiltered<R, E, A>(u: unknown): u is Filtered<R, E, A>
1888
+ export function isFiltered<A, E, R>(u: unknown): u is Filtered<A, E, R>
1880
1889
  export function isFiltered(u: unknown): u is Filtered.Any
1881
1890
  export function isFiltered(u: unknown): u is Filtered.Any {
1882
1891
  return isObjectLike(u) && FilteredTypeId in u
@@ -1885,7 +1894,7 @@ export function isFiltered(u: unknown): u is Filtered.Any {
1885
1894
  /**
1886
1895
  * @since 1.20.0
1887
1896
  */
1888
- export function isDerived<R, E, A>(u: unknown): u is RefSubject.Derived<R, E, A>
1897
+ export function isDerived<A, E, R>(u: unknown): u is RefSubject.Derived<A, E, R>
1889
1898
  export function isDerived(u: unknown): u is RefSubject.Derived<unknown, unknown, unknown>
1890
1899
  export function isDerived(u: unknown): u is RefSubject.Derived<unknown, unknown, unknown> {
1891
1900
  return isRefSubject(u) && "persist" in u
@@ -1902,30 +1911,30 @@ function isObjectLike(u: unknown): u is object {
1902
1911
  /**
1903
1912
  * @since 1.20.0
1904
1913
  */
1905
- export function computedFromTag<I, S, R, E, A>(
1914
+ export function computedFromTag<I, S, A, E, R>(
1906
1915
  tag: C.Tag<I, S>,
1907
- f: (s: S) => Computed<R, E, A>
1908
- ): Computed<I | R, E, A> {
1916
+ f: (s: S) => Computed<A, E, R>
1917
+ ): Computed<A, E, I | R> {
1909
1918
  return new ComputedFromTag(tag, f)
1910
1919
  }
1911
1920
 
1912
- class ComputedFromTag<I, S, R, E, A> extends FxEffectBase<
1913
- I | R | Scope.Scope,
1921
+ class ComputedFromTag<I, S, A, E, R> extends FxEffectBase<
1922
+ A,
1914
1923
  E,
1924
+ I | R | Scope.Scope,
1915
1925
  A,
1916
- I | R,
1917
1926
  E,
1918
- A
1919
- > implements Computed<I | R, E, A> {
1927
+ I | R
1928
+ > implements Computed<A, E, R | I> {
1920
1929
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
1921
1930
 
1922
- readonly version: Effect.Effect<I | R, E, number>
1931
+ readonly version: Effect.Effect<number, E, I | R>
1923
1932
 
1924
- private _get: Effect.Effect<I, never, Computed<R, E, A>>
1933
+ private _get: Effect.Effect<Computed<A, E, R>, never, I>
1925
1934
 
1926
1935
  constructor(
1927
1936
  readonly tag: C.Tag<I, S>,
1928
- readonly f: (s: S) => Computed<R, E, A>
1937
+ readonly f: (s: S) => Computed<A, E, R>
1929
1938
  ) {
1930
1939
  super()
1931
1940
 
@@ -1933,11 +1942,11 @@ class ComputedFromTag<I, S, R, E, A> extends FxEffectBase<
1933
1942
  this.version = Effect.flatMap(this._get, (ref) => ref.version)
1934
1943
  }
1935
1944
 
1936
- run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<I | R | Scope.Scope | R3, never, unknown> {
1945
+ run<R3>(sink: Sink.Sink<A, E, R3>): Effect.Effect<unknown, never, I | R | Scope.Scope | R3> {
1937
1946
  return Effect.flatMap(this._get, (ref) => ref.run(sink))
1938
1947
  }
1939
1948
 
1940
- toEffect(): Effect.Effect<I | R, E, A> {
1949
+ toEffect(): Effect.Effect<A, E, I | R> {
1941
1950
  return Effect.flatten(this._get)
1942
1951
  }
1943
1952
  }
@@ -1945,30 +1954,30 @@ class ComputedFromTag<I, S, R, E, A> extends FxEffectBase<
1945
1954
  /**
1946
1955
  * @since 1.20.0
1947
1956
  */
1948
- export function filteredFromTag<I, S, R, E, A>(
1957
+ export function filteredFromTag<I, S, A, E, R>(
1949
1958
  tag: C.Tag<I, S>,
1950
- f: (s: S) => Filtered<R, E, A>
1951
- ): Filtered<I | R, E, A> {
1959
+ f: (s: S) => Filtered<A, E, R>
1960
+ ): Filtered<A, E, R | I> {
1952
1961
  return new FilteredFromTag(tag, f)
1953
1962
  }
1954
1963
 
1955
- class FilteredFromTag<I, S, R, E, A> extends FxEffectBase<
1956
- I | R | Scope.Scope,
1964
+ class FilteredFromTag<I, S, A, E, R> extends FxEffectBase<
1965
+ A,
1957
1966
  E,
1967
+ I | R | Scope.Scope,
1958
1968
  A,
1959
- I | R,
1960
1969
  E | Cause.NoSuchElementException,
1961
- A
1962
- > implements Filtered<I | R, E, A> {
1970
+ I | R
1971
+ > implements Filtered<A, E, R | I> {
1963
1972
  readonly [FilteredTypeId]: FilteredTypeId = FilteredTypeId
1964
1973
 
1965
- readonly version: Effect.Effect<I | R, E, number>
1974
+ readonly version: Effect.Effect<number, E, I | R>
1966
1975
 
1967
- private _get: Effect.Effect<I, never, Filtered<R, E, A>>
1976
+ private _get: Effect.Effect<Filtered<A, E, R>, never, I>
1968
1977
 
1969
1978
  constructor(
1970
1979
  readonly tag: C.Tag<I, S>,
1971
- readonly f: (s: S) => Filtered<R, E, A>
1980
+ readonly f: (s: S) => Filtered<A, E, R>
1972
1981
  ) {
1973
1982
  super()
1974
1983
 
@@ -1976,15 +1985,15 @@ class FilteredFromTag<I, S, R, E, A> extends FxEffectBase<
1976
1985
  this.version = Effect.flatMap(this._get, (ref) => ref.version)
1977
1986
  }
1978
1987
 
1979
- run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<I | R | Scope.Scope | R3, never, unknown> {
1988
+ run<R3>(sink: Sink.Sink<A, E, R3>): Effect.Effect<unknown, never, I | R | Scope.Scope | R3> {
1980
1989
  return Effect.flatMap(this._get, (ref) => ref.run(sink))
1981
1990
  }
1982
1991
 
1983
- toEffect(): Effect.Effect<I | R, E | Cause.NoSuchElementException, A> {
1992
+ toEffect(): Effect.Effect<A, E | Cause.NoSuchElementException, I | R> {
1984
1993
  return Effect.flatten(this._get)
1985
1994
  }
1986
1995
 
1987
- asComputed(): Computed<I | R, E, Option.Option<A>> {
1996
+ asComputed(): Computed<Option.Option<A>, E, R | I> {
1988
1997
  return new ComputedFromTag(this.tag, (s) => this.f(s).asComputed())
1989
1998
  }
1990
1999
  }
@@ -1994,39 +2003,39 @@ class FilteredFromTag<I, S, R, E, A> extends FxEffectBase<
1994
2003
  */
1995
2004
  export const provide: {
1996
2005
  <S>(context: C.Context<S> | Runtime.Runtime<S>): {
1997
- <R, E, A>(filtered: Filtered<R, E, A>): Filtered<Exclude<R, S>, E, A>
1998
- <R, E, A>(computed: Computed<R, E, A>): Computed<Exclude<R, S>, E, A>
1999
- <R, E, A>(ref: RefSubject<R, E, A>): RefSubject<Exclude<R, S>, E, A>
2006
+ <A, E, R>(filtered: Filtered<A, E, R>): Filtered<A, E, Exclude<R, S>>
2007
+ <A, E, R>(computed: Computed<A, E, R>): Computed<A, E, Exclude<R, S>>
2008
+ <A, E, R>(ref: RefSubject<A, E, R>): RefSubject<A, E, Exclude<R, S>>
2000
2009
  }
2001
2010
 
2002
- <R2, S>(layer: Layer.Layer<R2, never, S>): {
2003
- <R, E, A>(filtered: Filtered<R, E, A>): Filtered<Exclude<R, S> | R2, E, A>
2004
- <R, E, A>(computed: Computed<R, E, A>): Computed<Exclude<R, S> | R2, E, A>
2005
- <R, E, A>(ref: RefSubject<R, E, A>): RefSubject<Exclude<R, S> | R2, E, A>
2011
+ <R2, S>(layer: Layer.Layer<S, never, R2>): {
2012
+ <A, E, R>(filtered: Filtered<A, E, R>): Filtered<A, E, Exclude<R, S> | R2>
2013
+ <A, E, R>(computed: Computed<A, E, R>): Computed<A, E, Exclude<R, S> | R2>
2014
+ <A, E, R>(ref: RefSubject<A, E, R>): RefSubject<A, E, Exclude<R, S> | R2>
2006
2015
  }
2007
2016
 
2008
- <R, E, A, S>(
2009
- filtered: Filtered<R, E, A>,
2017
+ <A, E, R, S>(
2018
+ filtered: Filtered<A, E, R>,
2010
2019
  context: C.Context<S> | Runtime.Runtime<S>
2011
- ): Filtered<Exclude<R, S>, E, A>
2012
- <R, E, A, S>(
2013
- computed: Computed<R, E, A>,
2020
+ ): Filtered<A, E, Exclude<R, S>>
2021
+ <A, E, R, S>(
2022
+ computed: Computed<A, E, R>,
2014
2023
  context: C.Context<S> | Runtime.Runtime<S>
2015
- ): Computed<Exclude<R, S>, E, A>
2016
- <R, E, A, S>(
2017
- ref: RefSubject<R, E, A>,
2024
+ ): Computed<A, E, Exclude<R, S>>
2025
+ <A, E, R, S>(
2026
+ ref: RefSubject<A, E, R>,
2018
2027
  context: C.Context<S> | Runtime.Runtime<S>
2019
- ): RefSubject<Exclude<R, S>, E, A>
2020
-
2021
- <R, E, A, R2, S>(filtered: Filtered<R, E, A>, layer: Layer.Layer<R2, never, S>): Filtered<Exclude<R, S> | R2, E, A>
2022
- <R, E, A, R2, S>(computed: Computed<R, E, A>, layer: Layer.Layer<R2, never, S>): Computed<Exclude<R, S> | R2, E, A>
2023
- <R, E, A, R2, S>(ref: RefSubject<R, E, A>, layer: Layer.Layer<R2, never, S>): RefSubject<Exclude<R, S> | R2, E, A>
2024
- } = dual(2, function provide<R, E, A, R2 = never, S = never>(
2025
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>,
2026
- providing: Layer.Layer<R2, never, S> | C.Context<S> | Runtime.Runtime<S>
2028
+ ): RefSubject<A, E, Exclude<R, S>>
2029
+
2030
+ <A, E, R, R2, S>(filtered: Filtered<A, E, R>, layer: Layer.Layer<S, never, R2>): Filtered<A, E, Exclude<R, S> | R2>
2031
+ <A, E, R, R2, S>(computed: Computed<A, E, R>, layer: Layer.Layer<S, never, R2>): Computed<A, E, Exclude<R, S> | R2>
2032
+ <A, E, R, R2, S>(ref: RefSubject<A, E, R>, layer: Layer.Layer<S, never, R2>): RefSubject<A, E, Exclude<R, S> | R2>
2033
+ } = dual(2, function provide<A, E, R, R2 = never, S = never>(
2034
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
2035
+ providing: Layer.Layer<S, never, R2> | C.Context<S> | Runtime.Runtime<S>
2027
2036
  ) {
2028
2037
  const layer = Layer.isLayer(providing)
2029
- ? providing as Layer.Layer<R2, never, S>
2038
+ ? providing as Layer.Layer<S, never, R2>
2030
2039
  : C.isContext(providing)
2031
2040
  ? Layer.succeedContext(providing)
2032
2041
  : runtimeToLayer(providing as Runtime.Runtime<S>)
@@ -2040,23 +2049,23 @@ export const provide: {
2040
2049
  }
2041
2050
  })
2042
2051
 
2043
- class RefSubjectProvide<R, E, A, R2, S> extends FxEffectBase<
2044
- Exclude<R, S> | R2 | Scope.Scope,
2052
+ class RefSubjectProvide<A, E, R, R2, S> extends FxEffectBase<
2053
+ A,
2045
2054
  E,
2055
+ Exclude<R, S> | R2 | Scope.Scope,
2046
2056
  A,
2047
- Exclude<R, S> | R2,
2048
2057
  E,
2049
- A
2058
+ Exclude<R, S> | R2
2050
2059
  > {
2051
2060
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
2052
2061
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
2053
2062
 
2054
- readonly interrupt: Effect.Effect<Exclude<R, S> | R2, never, void>
2055
- readonly subscriberCount: Effect.Effect<Exclude<R, S> | R2, never, number>
2063
+ readonly interrupt: Effect.Effect<void, never, Exclude<R, S> | R2>
2064
+ readonly subscriberCount: Effect.Effect<number, never, Exclude<R, S> | R2>
2056
2065
 
2057
2066
  constructor(
2058
- readonly ref: RefSubject<R, E, A>,
2059
- readonly layer: Layer.Layer<R2, never, S>
2067
+ readonly ref: RefSubject<A, E, R>,
2068
+ readonly layer: Layer.Layer<S, never, R2>
2060
2069
  ) {
2061
2070
  super()
2062
2071
 
@@ -2065,12 +2074,12 @@ class RefSubjectProvide<R, E, A, R2, S> extends FxEffectBase<
2065
2074
  }
2066
2075
 
2067
2076
  run<R3>(
2068
- sink: Sink.Sink<R3, E, A>
2069
- ): Effect.Effect<R2 | Scope.Scope | Exclude<Scope.Scope, S> | Exclude<R, S> | Exclude<R3, S>, never, unknown> {
2077
+ sink: Sink.Sink<A, E, R3>
2078
+ ): Effect.Effect<unknown, never, R2 | Scope.Scope | Exclude<Scope.Scope, S> | Exclude<R, S> | Exclude<R3, S>> {
2070
2079
  return Effect.provide(this.ref.run(sink), this.layer)
2071
2080
  }
2072
2081
 
2073
- toEffect(): Effect.Effect<Exclude<R, S> | R2, E, A> {
2082
+ toEffect(): Effect.Effect<A, E, Exclude<R, S> | R2> {
2074
2083
  return Effect.provide(this.ref, this.layer)
2075
2084
  }
2076
2085
  }
@@ -2079,24 +2088,24 @@ class RefSubjectProvide<R, E, A, R2, S> extends FxEffectBase<
2079
2088
  * Set the value to true
2080
2089
  * @since 1.18.0
2081
2090
  */
2082
- export const asTrue: <R, E>(ref: RefSubject<R, E, boolean>) => Effect.Effect<R, E, boolean> = <R, E>(
2083
- ref: RefSubject<R, E, boolean>
2091
+ export const asTrue: <E, R>(ref: RefSubject<boolean, E, R>) => Effect.Effect<boolean, E, R> = <E, R>(
2092
+ ref: RefSubject<boolean, E, R>
2084
2093
  ) => set(ref, true)
2085
2094
 
2086
2095
  /**
2087
2096
  * Set the value to false
2088
2097
  * @since 1.18.0
2089
2098
  */
2090
- export const asFalse: <R, E>(ref: RefSubject<R, E, boolean>) => Effect.Effect<R, E, boolean> = <R, E>(
2091
- ref: RefSubject<R, E, boolean>
2099
+ export const asFalse: <E, R>(ref: RefSubject<boolean, E, R>) => Effect.Effect<boolean, E, R> = <E, R>(
2100
+ ref: RefSubject<boolean, E, R>
2092
2101
  ) => set(ref, false)
2093
2102
 
2094
2103
  /**
2095
2104
  * Toggle the boolean value between true and false
2096
2105
  * @since 1.18.0
2097
2106
  */
2098
- export const toggle: <R, E>(ref: RefSubject<R, E, boolean>) => Effect.Effect<R, E, boolean> = <R, E>(
2099
- ref: RefSubject<R, E, boolean>
2107
+ export const toggle: <E, R>(ref: RefSubject<boolean, E, R>) => Effect.Effect<boolean, E, R> = <E, R>(
2108
+ ref: RefSubject<boolean, E, R>
2100
2109
  ) => update(ref, Boolean.not)
2101
2110
 
2102
2111
  const add = (x: number): number => x + 1
@@ -2105,8 +2114,8 @@ const add = (x: number): number => x + 1
2105
2114
  * Set the value to true
2106
2115
  * @since 1.18.0
2107
2116
  */
2108
- export const increment: <R, E>(ref: RefSubject<R, E, number>) => Effect.Effect<R, E, number> = <R, E>(
2109
- ref: RefSubject<R, E, number>
2117
+ export const increment: <E, R>(ref: RefSubject<number, E, R>) => Effect.Effect<number, E, R> = <E, R>(
2118
+ ref: RefSubject<number, E, R>
2110
2119
  ) => update(ref, add)
2111
2120
 
2112
2121
  const sub = (x: number): number => x - 1
@@ -2115,19 +2124,19 @@ const sub = (x: number): number => x - 1
2115
2124
  * Set the value to false
2116
2125
  * @since 1.18.0
2117
2126
  */
2118
- export const decrement: <R, E>(ref: RefSubject<R, E, number>) => Effect.Effect<R, E, number> = <R, E>(
2119
- ref: RefSubject<R, E, number>
2127
+ export const decrement: <E, R>(ref: RefSubject<number, E, R>) => Effect.Effect<number, E, R> = <E, R>(
2128
+ ref: RefSubject<number, E, R>
2120
2129
  ) => update(ref, sub)
2121
2130
 
2122
2131
  /**
2123
2132
  * @since 1.20.0
2124
2133
  */
2125
2134
  export const slice: {
2126
- (drop: number, take: number): <R, E, A>(ref: RefSubject<R, E, A>) => RefSubject<R, E, A>
2127
- <R, E, A>(ref: RefSubject<R, E, A>, drop: number, take: number): RefSubject<R, E, A>
2135
+ (drop: number, take: number): <A, E, R>(ref: RefSubject<A, E, R>) => RefSubject<A, E, R>
2136
+ <A, E, R>(ref: RefSubject<A, E, R>, drop: number, take: number): RefSubject<A, E, R>
2128
2137
  } = dual(
2129
2138
  3,
2130
- function slice<R, E, A>(ref: RefSubject<R, E, A>, drop: number, take: number): RefSubject<R, E, A> {
2139
+ function slice<A, E, R>(ref: RefSubject<A, E, R>, drop: number, take: number): RefSubject<A, E, R> {
2131
2140
  return new RefSubjectSlice(ref, drop, take)
2132
2141
  }
2133
2142
  )
@@ -2136,9 +2145,9 @@ export const slice: {
2136
2145
  * @since 1.20.0
2137
2146
  */
2138
2147
  export const drop: {
2139
- (drop: number): <R, E, A>(ref: RefSubject<R, E, A>) => RefSubject<R, E, A>
2140
- <R, E, A>(ref: RefSubject<R, E, A>, drop: number): RefSubject<R, E, A>
2141
- } = dual(2, function drop<R, E, A>(ref: RefSubject<R, E, A>, drop: number): RefSubject<R, E, A> {
2148
+ (drop: number): <A, E, R>(ref: RefSubject<A, E, R>) => RefSubject<A, E, R>
2149
+ <A, E, R>(ref: RefSubject<A, E, R>, drop: number): RefSubject<A, E, R>
2150
+ } = dual(2, function drop<A, E, R>(ref: RefSubject<A, E, R>, drop: number): RefSubject<A, E, R> {
2142
2151
  return slice(ref, drop, Infinity)
2143
2152
  })
2144
2153
 
@@ -2146,23 +2155,23 @@ export const drop: {
2146
2155
  * @since 1.20.0
2147
2156
  */
2148
2157
  export const take: {
2149
- (take: number): <R, E, A>(ref: RefSubject<R, E, A>) => RefSubject<R, E, A>
2150
- <R, E, A>(ref: RefSubject<R, E, A>, take: number): RefSubject<R, E, A>
2151
- } = dual(2, function take<R, E, A>(ref: RefSubject<R, E, A>, take: number): RefSubject<R, E, A> {
2158
+ (take: number): <A, E, R>(ref: RefSubject<A, E, R>) => RefSubject<A, E, R>
2159
+ <A, E, R>(ref: RefSubject<A, E, R>, take: number): RefSubject<A, E, R>
2160
+ } = dual(2, function take<A, E, R>(ref: RefSubject<A, E, R>, take: number): RefSubject<A, E, R> {
2152
2161
  return slice(ref, 0, take)
2153
2162
  })
2154
2163
 
2155
- class RefSubjectSlice<R, E, A> extends FxEffectBase<R | Scope.Scope, E, A, R, E, A> implements RefSubject<R, E, A> {
2164
+ class RefSubjectSlice<A, E, R> extends FxEffectBase<A, E, R | Scope.Scope, A, E, R> implements RefSubject<A, E, R> {
2156
2165
  readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
2157
2166
  readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
2158
2167
 
2159
- readonly version: Effect.Effect<R, E, number>
2160
- readonly interrupt: Effect.Effect<R, never, void>
2161
- readonly subscriberCount: Effect.Effect<R, never, number>
2162
- private _fx: Fx<Scope.Scope | R, E, A>
2168
+ readonly version: Effect.Effect<number, E, R>
2169
+ readonly interrupt: Effect.Effect<void, never, R>
2170
+ readonly subscriberCount: Effect.Effect<number, never, R>
2171
+ private _fx: Fx<A, E, Scope.Scope | R>
2163
2172
 
2164
2173
  constructor(
2165
- readonly ref: RefSubject<R, E, A>,
2174
+ readonly ref: RefSubject<A, E, R>,
2166
2175
  readonly drop: number,
2167
2176
  readonly take: number
2168
2177
  ) {
@@ -2175,25 +2184,25 @@ class RefSubjectSlice<R, E, A> extends FxEffectBase<R | Scope.Scope, E, A, R, E,
2175
2184
  this._effect = ref
2176
2185
  }
2177
2186
 
2178
- run<R2>(sink: Sink.Sink<R2, E, A>): Effect.Effect<R | R2 | Scope.Scope, never, unknown> {
2187
+ run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R | R2 | Scope.Scope> {
2179
2188
  return this._fx.run(sink)
2180
2189
  }
2181
2190
 
2182
- toEffect(): Effect.Effect<R, E, A> {
2191
+ toEffect(): Effect.Effect<A, E, R> {
2183
2192
  return this.ref
2184
2193
  }
2185
2194
 
2186
- runUpdates<R2, E2, C>(
2187
- run: (ref: GetSetDelete<R, E, A>) => Effect.Effect<R2, E2, C>
2188
- ): Effect.Effect<R | R2, E2, C> {
2195
+ runUpdates<E2, R2, C>(
2196
+ run: (ref: GetSetDelete<A, E, R>) => Effect.Effect<C, E2, R2>
2197
+ ): Effect.Effect<C, E2, R | R2> {
2189
2198
  return this.ref.runUpdates(run)
2190
2199
  }
2191
2200
 
2192
- onFailure(cause: Cause.Cause<E>): Effect.Effect<R, never, unknown> {
2201
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R> {
2193
2202
  return this.ref.onFailure(cause)
2194
2203
  }
2195
2204
 
2196
- onSuccess(value: A): Effect.Effect<R, never, unknown> {
2205
+ onSuccess(value: A): Effect.Effect<unknown, never, R> {
2197
2206
  return this.ref.onSuccess(value)
2198
2207
  }
2199
2208
  }