@typed/fx 1.23.0 → 1.24.1

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 (147) 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/Match.js.map +1 -1
  7. package/dist/cjs/Pull.js +5 -3
  8. package/dist/cjs/Pull.js.map +1 -1
  9. package/dist/cjs/RefArray.js.map +1 -1
  10. package/dist/cjs/RefChunk.js.map +1 -1
  11. package/dist/cjs/RefHashSet.js.map +1 -1
  12. package/dist/cjs/RefSubject.js +24 -24
  13. package/dist/cjs/RefSubject.js.map +1 -1
  14. package/dist/cjs/Sink.js.map +1 -1
  15. package/dist/cjs/Subject.js.map +1 -1
  16. package/dist/cjs/Versioned.js.map +1 -1
  17. package/dist/cjs/internal/core.js +3 -2
  18. package/dist/cjs/internal/core.js.map +1 -1
  19. package/dist/cjs/internal/keyed.js.map +1 -1
  20. package/dist/cjs/internal/provide.js.map +1 -1
  21. package/dist/dts/AsyncData.d.ts +36 -36
  22. package/dist/dts/AsyncData.d.ts.map +1 -1
  23. package/dist/dts/Emitter.d.ts +2 -2
  24. package/dist/dts/Form.d.ts +6 -6
  25. package/dist/dts/Form.d.ts.map +1 -1
  26. package/dist/dts/FormEntry.d.ts +8 -8
  27. package/dist/dts/Fx.d.ts +414 -414
  28. package/dist/dts/Fx.d.ts.map +1 -1
  29. package/dist/dts/Guard.d.ts +21 -21
  30. package/dist/dts/Guard.d.ts.map +1 -1
  31. package/dist/dts/Idle.d.ts +3 -3
  32. package/dist/dts/Idle.d.ts.map +1 -1
  33. package/dist/dts/Match.d.ts +16 -16
  34. package/dist/dts/Match.d.ts.map +1 -1
  35. package/dist/dts/Pull.d.ts +5 -5
  36. package/dist/dts/Pull.d.ts.map +1 -1
  37. package/dist/dts/Push.d.ts +40 -40
  38. package/dist/dts/Push.d.ts.map +1 -1
  39. package/dist/dts/RefArray.d.ts +59 -59
  40. package/dist/dts/RefArray.d.ts.map +1 -1
  41. package/dist/dts/RefChunk.d.ts +45 -45
  42. package/dist/dts/RefChunk.d.ts.map +1 -1
  43. package/dist/dts/RefHashMap.d.ts +35 -35
  44. package/dist/dts/RefHashMap.d.ts.map +1 -1
  45. package/dist/dts/RefHashSet.d.ts +17 -17
  46. package/dist/dts/RefHashSet.d.ts.map +1 -1
  47. package/dist/dts/RefSubject.d.ts +127 -127
  48. package/dist/dts/RefSubject.d.ts.map +1 -1
  49. package/dist/dts/Sink.d.ts +60 -60
  50. package/dist/dts/Sink.d.ts.map +1 -1
  51. package/dist/dts/Stream.d.ts +11 -11
  52. package/dist/dts/Stream.d.ts.map +1 -1
  53. package/dist/dts/Subject.d.ts +10 -10
  54. package/dist/dts/Subject.d.ts.map +1 -1
  55. package/dist/dts/Typeclass.d.ts +1 -1
  56. package/dist/dts/Typeclass.d.ts.map +1 -1
  57. package/dist/dts/Versioned.d.ts +28 -28
  58. package/dist/dts/Versioned.d.ts.map +1 -1
  59. package/dist/dts/index.d.ts +1 -1
  60. package/dist/dts/internal/DeferredRef.d.ts +1 -1
  61. package/dist/dts/internal/DeferredRef.d.ts.map +1 -1
  62. package/dist/dts/internal/core.d.ts +191 -191
  63. package/dist/dts/internal/core.d.ts.map +1 -1
  64. package/dist/dts/internal/effect-loop-operator.d.ts +2 -2
  65. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
  66. package/dist/dts/internal/effect-operator.d.ts +9 -9
  67. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  68. package/dist/dts/internal/effect-producer.d.ts +10 -10
  69. package/dist/dts/internal/effect-producer.d.ts.map +1 -1
  70. package/dist/dts/internal/helpers.d.ts +16 -16
  71. package/dist/dts/internal/helpers.d.ts.map +1 -1
  72. package/dist/dts/internal/keyed.d.ts +1 -1
  73. package/dist/dts/internal/keyed.d.ts.map +1 -1
  74. package/dist/dts/internal/loop-operator.d.ts +2 -2
  75. package/dist/dts/internal/loop-operator.d.ts.map +1 -1
  76. package/dist/dts/internal/operator.d.ts +2 -2
  77. package/dist/dts/internal/operator.d.ts.map +1 -1
  78. package/dist/dts/internal/protos.d.ts +7 -7
  79. package/dist/dts/internal/protos.d.ts.map +1 -1
  80. package/dist/dts/internal/provide.d.ts +10 -10
  81. package/dist/dts/internal/provide.d.ts.map +1 -1
  82. package/dist/dts/internal/share.d.ts +10 -10
  83. package/dist/dts/internal/share.d.ts.map +1 -1
  84. package/dist/dts/internal/sync-operator.d.ts +2 -2
  85. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  86. package/dist/dts/internal/sync-producer.d.ts +4 -4
  87. package/dist/dts/internal/sync-producer.d.ts.map +1 -1
  88. package/dist/dts/internal/withKey.d.ts +1 -1
  89. package/dist/dts/internal/withKey.d.ts.map +1 -1
  90. package/dist/esm/AsyncData.js.map +1 -1
  91. package/dist/esm/Form.js.map +1 -1
  92. package/dist/esm/FormEntry.js.map +1 -1
  93. package/dist/esm/Fx.js +1 -1
  94. package/dist/esm/Fx.js.map +1 -1
  95. package/dist/esm/Match.js.map +1 -1
  96. package/dist/esm/Pull.js +3 -3
  97. package/dist/esm/Pull.js.map +1 -1
  98. package/dist/esm/RefArray.js.map +1 -1
  99. package/dist/esm/RefChunk.js.map +1 -1
  100. package/dist/esm/RefHashSet.js.map +1 -1
  101. package/dist/esm/RefSubject.js +19 -18
  102. package/dist/esm/RefSubject.js.map +1 -1
  103. package/dist/esm/Sink.js.map +1 -1
  104. package/dist/esm/Subject.js.map +1 -1
  105. package/dist/esm/Versioned.js.map +1 -1
  106. package/dist/esm/index.js +1 -1
  107. package/dist/esm/internal/core.js +3 -2
  108. package/dist/esm/internal/core.js.map +1 -1
  109. package/dist/esm/internal/keyed.js.map +1 -1
  110. package/dist/esm/internal/provide.js.map +1 -1
  111. package/package.json +2 -2
  112. package/src/AsyncData.ts +71 -73
  113. package/src/Emitter.ts +5 -5
  114. package/src/Form.ts +27 -27
  115. package/src/FormEntry.ts +29 -29
  116. package/src/Fx.ts +735 -734
  117. package/src/Guard.ts +39 -39
  118. package/src/Idle.ts +4 -4
  119. package/src/Match.ts +57 -58
  120. package/src/Pull.ts +35 -36
  121. package/src/Push.ts +170 -170
  122. package/src/RefArray.ts +114 -112
  123. package/src/RefChunk.ts +93 -92
  124. package/src/RefHashMap.ts +71 -71
  125. package/src/RefHashSet.ts +40 -39
  126. package/src/RefSubject.ts +457 -448
  127. package/src/Sink.ts +235 -235
  128. package/src/Stream.ts +20 -20
  129. package/src/Subject.ts +34 -32
  130. package/src/Typeclass.ts +2 -2
  131. package/src/Versioned.ts +75 -75
  132. package/src/index.ts +1 -1
  133. package/src/internal/DeferredRef.ts +1 -1
  134. package/src/internal/core.ts +694 -706
  135. package/src/internal/effect-loop-operator.ts +3 -3
  136. package/src/internal/effect-operator.ts +12 -12
  137. package/src/internal/effect-producer.ts +25 -25
  138. package/src/internal/helpers.ts +18 -18
  139. package/src/internal/keyed.ts +18 -18
  140. package/src/internal/loop-operator.ts +2 -2
  141. package/src/internal/operator.ts +2 -2
  142. package/src/internal/protos.ts +8 -8
  143. package/src/internal/provide.ts +19 -19
  144. package/src/internal/share.ts +22 -22
  145. package/src/internal/sync-operator.ts +4 -4
  146. package/src/internal/sync-producer.ts +6 -6
  147. 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,14 +90,16 @@ 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<B, E2, R2>
101
+ readonly runUpdates: <B, E2, R2>(
102
+ f: (ref: GetSetDelete<A, E, R>) => Effect.Effect<B, E2, R2>
99
103
  ) => Effect.Effect<B, E2, R | R2>
100
104
  }
101
105
 
@@ -108,23 +112,23 @@ 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<A, E, R>,
131
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R>,
128
132
  options?: RefSubjectOptions<A>
129
133
  ) => Layer.Layer<I, never, R>
130
134
  }
@@ -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> {
141
+ export interface Derived<A, E, R> extends RefSubject<A, E, R> {
138
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>(
199
+ export function fromEffect<A, E, R>(
196
200
  effect: Effect.Effect<A, E, R>,
197
201
  options?: RefSubjectOptions<A>
198
- ): Effect.Effect<RefSubject<never, E, A>, never, R | Scope.Scope> {
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<RefSubject<never, E, A>, never, R | Scope.Scope> {
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<RefSubject.Derived<never, E, A>, never, R | Scope.Scope> {
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,34 +257,36 @@ 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
- return Effect.ignoreLogged(Effect.provide(Effect.flatMap(core.deferredRef, (value) => set(ref, value)), core.context))
262
+ return Effect.ignoreLogged(
263
+ Effect.provide(Effect.flatMap(core.deferredRef, (value) => set(ref, value)), core.runtime)
264
+ )
259
265
  }
260
266
 
261
267
  /**
262
268
  * @since 1.20.0
263
269
  */
264
270
  export const make: {
265
- <R, E, A>(
266
- ref: RefSubject<R, E, A>,
271
+ <A, E = never, R = never>(
272
+ ref: RefSubject<A, E, R>,
267
273
  options?: RefSubjectOptions<A>
268
- ): Effect.Effect<RefSubject.Derived<never, E, A>, never, R | Scope.Scope>
274
+ ): Effect.Effect<RefSubject.Derived<A, E, R>, never, R | Scope.Scope>
269
275
 
270
- <R, E, A>(
271
- fxOrEffect: Fx<R, E, A> | Effect.Effect<A, E, R>,
276
+ <A, E = never, R = never>(
277
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R>,
272
278
  options?: RefSubjectOptions<A>
273
- ): Effect.Effect<RefSubject<never, E, A>, never, R | Scope.Scope>
279
+ ): Effect.Effect<RefSubject<A, E>, never, R | Scope.Scope>
274
280
 
275
- <R, E, A>(
276
- fxOrEffect: Fx<R, E, A> | Effect.Effect<A, E, R> | RefSubject<R, E, A>,
281
+ <A, E = never, R = never>(
282
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R> | RefSubject<A, E, R>,
277
283
  options?: RefSubjectOptions<A>
278
- ): Effect.Effect<RefSubject<never, E, A> | RefSubject.Derived<never, E, A>, never, R | Scope.Scope>
279
- } = function make<R, E, A>(
280
- fxOrEffect: Fx<R, E, A> | Effect.Effect<A, E, R> | RefSubject<R, E, A>,
284
+ ): Effect.Effect<RefSubject<A, E> | RefSubject.Derived<A, E, R>, never, R | Scope.Scope>
285
+ } = function make<A, E, R>(
286
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R> | RefSubject<A, E, R>,
281
287
  options?: RefSubjectOptions<A>
282
288
  ): Effect.Effect<any, never, R | Scope.Scope> {
283
- if (RefSubjectTypeId in fxOrEffect) return fromRefSubject(fxOrEffect as RefSubject<R, E, A>, options)
289
+ if (RefSubjectTypeId in fxOrEffect) return fromRefSubject(fxOrEffect as RefSubject<A, E, R>, options)
284
290
  else if (TypeId in fxOrEffect) return fromFx(fxOrEffect, options)
285
291
  else return fromEffect(fxOrEffect, options)
286
292
  }
@@ -291,7 +297,7 @@ export const make: {
291
297
  export function of<A, E = never>(
292
298
  a: A,
293
299
  options?: RefSubjectOptions<A>
294
- ): Effect.Effect<RefSubject<never, E, A>, never, Scope.Scope> {
300
+ ): Effect.Effect<RefSubject<A, E>, never, Scope.Scope> {
295
301
  return Effect.acquireRelease(
296
302
  withScopeAndFiberId(
297
303
  (scope, id) =>
@@ -308,13 +314,11 @@ export function of<A, E = never>(
308
314
  )
309
315
  }
310
316
 
311
- const withScopeAndFiberId = <R, E, A>(
317
+ const withScopeAndFiberId = <A, E, R>(
312
318
  f: (scope: Scope.CloseableScope, id: FiberId.FiberId) => Effect.Effect<A, E, R>,
313
319
  strategy: ExecutionStrategy.ExecutionStrategy
314
320
  ) => Effect.fiberIdWith((id) => withScope((scope) => f(scope, id), strategy))
315
321
 
316
- const emptyContext = C.empty()
317
-
318
322
  /**
319
323
  * @since 1.20.0
320
324
  */
@@ -326,10 +330,10 @@ export function unsafeMake<E, A>(
326
330
  readonly scope: Scope.CloseableScope
327
331
  readonly initialValue?: A
328
332
  }
329
- ): Effect.Effect<RefSubject<never, E, A>> {
333
+ ): Effect.Effect<RefSubject<A, E>> {
330
334
  const { id, initial, options, scope } = params
331
- return Effect.suspend(() => {
332
- const core = unsafeMakeCore(initial, id, emptyContext, scope, options)
335
+ return Effect.flatMap(Effect.runtime(), (runtime) => {
336
+ const core = unsafeMakeCore(initial, id, runtime, scope, options)
333
337
 
334
338
  // Sometimes we might be instantiating directly from a known value
335
339
  // Here we seed the value and ensure the subject has it as well for re-broadcasting
@@ -342,8 +346,8 @@ 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
@@ -352,16 +356,16 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
352
356
  readonly interrupt: Effect.Effect<void, never, Exclude<R, R2>>
353
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
 
362
366
  this.version = Effect.sync(() => core.deferredRef.version)
363
- this.interrupt = Effect.provide(interruptCore(core), core.context)
364
- this.subscriberCount = Effect.provide(core.subject.subscriberCount, core.context)
367
+ this.interrupt = Effect.provide(interruptCore(core), core.runtime)
368
+ this.subscriberCount = Effect.provide(core.subject.subscriberCount, core.runtime)
365
369
  this.getSetDelete = getSetDelete(core)
366
370
 
367
371
  this.runUpdates = this.runUpdates.bind(this)
@@ -369,15 +373,15 @@ 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<unknown, never, Exclude<R, R2> | R3 | Scope.Scope> {
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
- onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.context)
379
+ onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.runtime)
376
380
  })
377
381
  }
378
382
 
379
383
  runUpdates<R3, E3, B>(
380
- run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<B, E3, R3>
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
  }
@@ -395,9 +399,9 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
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>,
404
+ core: RefSubjectCore<A, E, R, R2>,
401
405
  readonly persist: Effect.Effect<void, never, Exclude<R, R2>>
402
406
  ) {
403
407
  super(core)
@@ -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<A, E, R>
412
- <R, E, A>(ref: RefSubject<R, E, A>, a: A): Effect.Effect<A, E, R>
413
- } = dual(2, function set<R, E, A>(ref: RefSubject<R, E, A>, a: A): Effect.Effect<A, E, R> {
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<Option.Option<A>, E, R> {
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,7 +438,7 @@ 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
  */
@@ -449,7 +453,7 @@ export interface GetSetDelete<R, E, A> {
449
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,15 +465,15 @@ 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>(
468
+ <A, E2, R2>(
465
469
  f: (value: A) => Effect.Effect<A, E2, R2>
466
- ): <R, E>(ref: RefSubject<R, E, A>) => Effect.Effect<A, E | E2, R | R2>
467
- <R, E, A, R2, E2>(
468
- ref: RefSubject<R, E, A>,
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>,
469
473
  f: (value: A) => Effect.Effect<A, E2, R2>
470
474
  ): Effect.Effect<A, E | E2, R | R2>
471
- } = dual(2, function updateEffect<R, E, A, R2, E2>(
472
- ref: RefSubject<R, E, A>,
475
+ } = dual(2, function updateEffect<A, E, R, E2, R2>(
476
+ ref: RefSubject<A, E, R>,
473
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))
@@ -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<A, E, R>
483
- <R, E, A>(ref: RefSubject<R, E, A>, f: (value: A) => A): Effect.Effect<A, E, R>
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,15 +493,15 @@ export const update: {
489
493
  * @since 1.20.0
490
494
  */
491
495
  export const modifyEffect: {
492
- <A, R2, E2, B>(
496
+ <A, B, E2, R2>(
493
497
  f: (value: A) => Effect.Effect<readonly [B, A], E2, R2>
494
- ): <R, E>(ref: RefSubject<R, E, A>) => Effect.Effect<B, E | E2, R | R2>
495
- <R, E, A, R2, E2, B>(
496
- ref: RefSubject<R, E, A>,
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>,
497
501
  f: (value: A) => Effect.Effect<readonly [B, A], E2, R2>
498
502
  ): Effect.Effect<B, E | E2, R | R2>
499
- } = dual(2, function modifyEffect<R, E, A, R2, E2, B>(
500
- ref: RefSubject<R, E, A>,
503
+ } = dual(2, function modifyEffect<A, E, R, B, E2, R2>(
504
+ ref: RefSubject<A, E, R>,
501
505
  f: (value: A) => Effect.Effect<readonly [B, A], E2, R2>
502
506
  ) {
503
507
  return ref.runUpdates(
@@ -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<B, E, R>
517
- <R, E, A, B>(ref: RefSubject<R, E, A>, f: (value: A) => readonly [B, A]): Effect.Effect<B, E, R>
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,25 +529,25 @@ 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<B, E2, R2>,
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
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<B, E | E2 | E3, R | R2 | R3>
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<B, E2, R2>,
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
543
  | { readonly onInterrupt: (value: A) => Effect.Effect<C, E3, R3>; readonly value?: "initial" | "current" }
540
544
  | undefined
541
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<B, E2, R2>,
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
552
  readonly onInterrupt: (value: A) => Effect.Effect<C, E3, R3>
549
553
  readonly value?: "initial" | "current"
@@ -585,11 +589,11 @@ 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
594
  readonly initial: Effect.Effect<A, E, R>,
591
- readonly subject: Subject.Subject<R, E, A>,
592
- readonly context: C.Context<R2>,
595
+ readonly subject: Subject.Subject<A, E, R>,
596
+ readonly runtime: Runtime.Runtime<R2>,
593
597
  readonly scope: Scope.CloseableScope,
594
598
  readonly deferredRef: DeferredRef.DeferredRef<E, A>,
595
599
  readonly semaphore: Effect.Semaphore
@@ -598,28 +602,28 @@ class RefSubjectCore<R, E, A, R2> {
598
602
  public _fiber: Fiber.Fiber<A, E> | undefined = undefined
599
603
  }
600
604
 
601
- function makeCore<R, E, A>(
605
+ function makeCore<A, E, R>(
602
606
  initial: Effect.Effect<A, E, R>,
603
607
  options?: RefSubjectOptions<A>
604
608
  ) {
605
- return Effect.context<R | Scope.Scope>().pipe(
606
- Effect.bindTo("ctx"),
609
+ return Effect.runtime<R | Scope.Scope>().pipe(
610
+ Effect.bindTo("runtime"),
607
611
  Effect.let("executionStrategy", () => options?.executionStrategy ?? ExecutionStrategy.parallel),
608
612
  Effect.bind(
609
613
  "scope",
610
- ({ ctx, executionStrategy }) => Scope.fork(C.get(ctx, Scope.Scope), executionStrategy)
614
+ ({ executionStrategy, runtime }) => Scope.fork(C.get(runtime.context, Scope.Scope), executionStrategy)
611
615
  ),
612
616
  Effect.bind(
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
- Effect.map(({ ctx, deferredRef, scope, subject }) =>
622
+ Effect.map(({ deferredRef, runtime, scope, subject }) =>
619
623
  new RefSubjectCore(
620
624
  initial,
621
625
  subject,
622
- ctx,
626
+ runtime,
623
627
  scope,
624
628
  deferredRef,
625
629
  Effect.unsafeMakeSemaphore(1)
@@ -628,25 +632,25 @@ function makeCore<R, E, A>(
628
632
  )
629
633
  }
630
634
 
631
- function unsafeMakeCore<R, E, A>(
635
+ function unsafeMakeCore<A, E, R>(
632
636
  initial: Effect.Effect<A, E, R>,
633
637
  id: FiberId.FiberId,
634
- ctx: C.Context<R>,
638
+ runtime: Runtime.Runtime<R>,
635
639
  scope: Scope.CloseableScope,
636
640
  options?: RefSubjectOptions<A>
637
641
  ) {
638
642
  return new RefSubjectCore(
639
643
  initial,
640
- Subject.unsafeMake<E, A>(Math.max(1, options?.replay ?? 1)),
641
- ctx,
644
+ Subject.unsafeMake<A, E>(Math.max(1, options?.replay ?? 1)),
645
+ runtime,
642
646
  scope,
643
647
  DeferredRef.unsafeMake(id, getExitEquivalence(options?.eq ?? Equal.equals)),
644
648
  Effect.unsafeMakeSemaphore(1)
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
655
  ): Effect.Effect<A, E, Exclude<R, R2>> {
652
656
  return Effect.suspend(() => {
@@ -658,12 +662,12 @@ 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
668
  ): Effect.Effect<Fiber.Fiber<A, E>, never, Exclude<R, R2>> {
665
669
  const initialize = Effect.onExit(
666
- Effect.provide(core.initial, core.context),
670
+ Effect.provide(core.initial, core.runtime),
667
671
  (exit) =>
668
672
  Effect.sync(() => {
669
673
  core._fiber = undefined
@@ -680,8 +684,8 @@ 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
690
  ): Effect.Effect<Fiber.Fiber<A, E>, never, Exclude<R, R2>> {
687
691
  type Z = Effect.Effect<Fiber.Fiber<A, E>, never, Exclude<R, R2>>
@@ -710,8 +714,8 @@ 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
720
  ): Effect.Effect<A, E, Exclude<R, R2>> {
717
721
  return Effect.zipRight(
@@ -720,7 +724,7 @@ function initializeCoreAndTap<R, E, A, R2>(
720
724
  )
721
725
  }
722
726
 
723
- function setCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>, a: A): Effect.Effect<A, never, Exclude<R, R2>> {
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<void, never, R> {
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,8 +762,8 @@ 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>
765
+ function deleteCore<A, E, R, R2>(
766
+ core: RefSubjectCore<A, E, R, R2>
763
767
  ): Effect.Effect<Option.Option<A>, E, Exclude<R, R2>> {
764
768
  return Effect.suspend(() => {
765
769
  const current = core.deferredRef.current
@@ -770,7 +774,7 @@ function deleteCore<R, E, A, R2>(
770
774
  }
771
775
 
772
776
  return core.subject.subscriberCount.pipe(
773
- Effect.provide(core.context),
777
+ Effect.provide(core.runtime),
774
778
  Effect.flatMap(
775
779
  (count: number) => count > 0 && !core._fiber ? initializeCore(core, false) : Effect.unit
776
780
  ),
@@ -779,8 +783,8 @@ 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>,
786
+ function tapEventCore<A, E, R, R2, R3>(
787
+ core: RefSubjectCore<A, E, R, R2>,
784
788
  effect: Effect.Effect<A, E, R3>
785
789
  ) {
786
790
  return effect.pipe(
@@ -790,14 +794,14 @@ 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>,
797
+ function sendEvent<A, E, R, R2>(
798
+ core: RefSubjectCore<A, E, R, R2>,
795
799
  exit: Exit.Exit<A, E>
796
800
  ): Effect.Effect<unknown, never, Exclude<R, R2>> {
797
801
  if (Exit.isSuccess(exit)) {
798
- return Effect.provide(core.subject.onSuccess(exit.value), core.context)
802
+ return Effect.provide(core.subject.onSuccess(exit.value), core.runtime)
799
803
  } else {
800
- return Effect.provide(core.subject.onFailure(exit.cause), core.context)
804
+ return Effect.provide(core.subject.onFailure(exit.cause), core.runtime)
801
805
  }
802
806
  }
803
807
 
@@ -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>(
812
+ <A, B, E2, R2>(
809
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
+ <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>,
815
819
  f: (a: A) => Effect.Effect<C, E2, R2>
816
- ): Computed<R0 | R2, E0 | E | E2, C>
820
+ ): Computed<C, E0 | E | E2, R0 | R | R2>
817
821
  }
818
822
 
819
- <R, E, A, R2, E2, B>(
820
- ref: RefSubject<R, E, A> | Computed<R, E, A>,
823
+ <A, E, R, B, E2, R2>(
824
+ ref: RefSubject<A, E, R> | Computed<A, E, R>,
821
825
  f: (a: A) => Effect.Effect<B, E2, R2>
822
- ): Computed<R | R2, E | E2, B>
826
+ ): Computed<B, E | E2, R | R2>
823
827
 
824
- <R, E, A, R2, E2, B>(
825
- ref: Filtered<R, E, A>,
828
+ <A, E, R, B, E2, R2>(
829
+ ref: Filtered<A, E, R>,
826
830
  f: (a: A) => Effect.Effect<B, E2, R2>
827
- ): Filtered<R | R2, E | E2, B>
831
+ ): Filtered<B, E | E2, R | R2>
828
832
 
829
- <R0, E0, R, E, A, R2, E2, R3, E3, C>(
830
- versioned: Versioned.Versioned<R0, E0, R, E, A, R2, E2, A>,
833
+ <R0, E0, A, E, R, E2, R2, C, E3, R3>(
834
+ versioned: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
831
835
  f: (a: A) => Effect.Effect<C, E3, R3>
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>,
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>,
835
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>(
888
+ <A, B, E2, R2>(
885
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
+ <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>,
891
895
  f: (a: A) => Effect.Effect<Option.Option<B>, E2, R2>
892
- ): Filtered<R0 | R2, E0 | E | E2, B>
896
+ ): Filtered<B, E0 | E | E2, R0 | R2>
893
897
  }
894
898
 
895
- <R, E, A, R2, E2, B>(
896
- ref: RefSubject<R, E, A> | Computed<R, E, A> | Filtered<R, E, A>,
899
+ <A, E, R, B, E2, R2>(
900
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
897
901
  f: (a: A) => Effect.Effect<Option.Option<B>, E2, R2>
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>,
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>,
901
905
  f: (a: A) => Effect.Effect<Option.Option<B>, E3, R3>
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>,
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>,
905
909
  f: (a: A) => Effect.Effect<Option.Option<B>, E3, R3>
906
- ): Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, B> {
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>,
970
+ <A, E, R, E2, R2>(
971
+ ref: RefSubject<A, E, R> | Computed<A, E, R> | Filtered<A, E, R>,
963
972
  f: (a: A) => Effect.Effect<boolean, E2, R2>
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>,
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>,
967
976
  f: (a: A) => Effect.Effect<boolean, E3, R3>
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>,
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>,
971
980
  f: (a: A) => Effect.Effect<boolean, E3, R3>
972
- ): Filtered<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, A> {
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,45 +987,45 @@ 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>,
1028
+ readonly input: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
1020
1029
  readonly f: (a: A) => Effect.Effect<C, E3, R3>
1021
1030
  ) {
1022
1031
  super(
@@ -1026,34 +1035,34 @@ 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>,
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>,
1031
1040
  f: (a: A) => Effect.Effect<C, E3, R3>
1032
- ): Computed<R0 | Exclude<R, Scope.Scope> | R2 | R3 | R2 | R3, E0 | E | E2 | E3, C> {
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>,
1065
+ readonly input: Versioned.Versioned<R0, E0, A, E, R, A, E2, R2>,
1057
1066
  readonly f: (a: A) => Effect.Effect<Option.Option<C>, E3, R3>
1058
1067
  ) {
1059
1068
  super(
@@ -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>,
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>,
1068
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,48 +1126,48 @@ 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>,
1161
+ export function transformOrFail<R, E, A, E2, R2, R3, E3, B>(
1162
+ ref: RefSubject<A, E, R>,
1154
1163
  from: (a: A) => Effect.Effect<B, E2, R2>,
1155
1164
  to: (b: B) => Effect.Effect<A, E3, R3>
1156
- ): RefSubject<R | R2 | R3, E | E2 | E3, B> {
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
@@ -1168,7 +1177,7 @@ class RefSubjectTransform<R, E, A, B> extends FxEffectBase<R | Scope.Scope, E, B
1168
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<unknown, never, R | Scope.Scope | R2> {
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<C, E2, R2>
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({
@@ -1208,9 +1217,9 @@ class RefSubjectTransform<R, E, A, B> extends FxEffectBase<R | Scope.Scope, E, B
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
@@ -1218,10 +1227,10 @@ class RefSubjectTransformEffect<R, E, A, R2, E2, B, R3, E3>
1218
1227
  readonly version: Effect.Effect<number, E, R>
1219
1228
  readonly interrupt: Effect.Effect<void, never, R>
1220
1229
  readonly subscriberCount: Effect.Effect<number, never, R>
1221
- readonly subject: Subject.Subject<never, E | E2 | E3, B>
1230
+ readonly subject: Subject.Subject<B, E | E2 | E3>
1222
1231
 
1223
1232
  constructor(
1224
- readonly ref: RefSubject<R, E, A>,
1233
+ readonly ref: RefSubject<A, E, R>,
1225
1234
  readonly from: (a: A) => Effect.Effect<B, E2, R2>,
1226
1235
  readonly to: (b: B) => Effect.Effect<A, E3, R3>
1227
1236
  ) {
@@ -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<unknown, never, R | R2 | R3 | Scope.Scope | R4> {
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<C, E4, R4>
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({
@@ -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,16 +1401,16 @@ 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
@@ -1411,20 +1420,20 @@ class RefSubjectTuple<
1411
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,11 +1462,11 @@ 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
1471
  ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[number]> | R2> {
1463
1472
  return this.versioned.run(sink)
@@ -1471,14 +1480,14 @@ class RefSubjectTuple<
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
1492
  ) => Effect.Effect<C, E2, R2>
1484
1493
  ) {
@@ -1536,23 +1545,23 @@ 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
@@ -1567,20 +1576,20 @@ class RefSubjectStruct<
1567
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,9 +1618,9 @@ 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
1625
  ): Effect.Effect<unknown, never, Effect.Effect.Context<Refs[keyof Refs]> | R3> {
1617
1626
  return this.versioned.run(sink)
@@ -1625,14 +1634,14 @@ class RefSubjectStruct<
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
1646
  ) => Effect.Effect<C, E2, R2>
1638
1647
  ) {
@@ -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,16 +1736,16 @@ 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
@@ -1746,7 +1755,7 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
1746
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,7 +1770,7 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
1761
1770
  }
1762
1771
 
1763
1772
  run<R2 = never>(
1764
- sink: Sink.Sink<R2, E, A>
1773
+ sink: Sink.Sink<A, E, R2>
1765
1774
  ): Effect.Effect<unknown, never, I | R2 | Scope.Scope> {
1766
1775
  return this.tag.withEffect((ref) => ref.run(sink))
1767
1776
  }
@@ -1770,8 +1779,8 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
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<C, E2, R2>
1782
+ runUpdates<E2, R2, C>(
1783
+ run: (ref: GetSetDelete<A, E, I>) => Effect.Effect<C, E2, R2>
1775
1784
  ): Effect.Effect<C, E2, I | R2> {
1776
1785
  return this.tag.withEffect((ref) => ref.runUpdates(run))
1777
1786
  }
@@ -1785,7 +1794,7 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
1785
1794
  }
1786
1795
 
1787
1796
  make = <R>(
1788
- fxOrEffect: Fx<R, E, A> | Effect.Effect<A, E, R>,
1797
+ fxOrEffect: Fx<A, E, R> | Effect.Effect<A, E, R>,
1789
1798
  options?: RefSubjectOptions<A>
1790
1799
  ): Layer.Layer<I, never, R> => this.tag.scoped(make(fxOrEffect, options))
1791
1800
  }
@@ -1793,21 +1802,21 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
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
 
@@ -1815,12 +1824,12 @@ class RefSubjectFromTag<I, S, R, E, A> extends FxEffectBase<
1815
1824
  readonly interrupt: Effect.Effect<void, never, I | R>
1816
1825
  readonly subscriberCount: Effect.Effect<number, never, I | R>
1817
1826
 
1818
- private _get: Effect.Effect<RefSubject<R, E, A>, never, I>
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,7 +1841,7 @@ 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<unknown, never, I | R | R3 | Scope.Scope> {
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
 
@@ -1840,8 +1849,8 @@ class RefSubjectFromTag<I, S, R, E, A> extends FxEffectBase<
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<C, E2, R2>
1852
+ runUpdates<E2, R2, C>(
1853
+ run: (ref: GetSetDelete<A, E, R | I>) => Effect.Effect<C, E2, R2>
1845
1854
  ): Effect.Effect<C, E2, I | R | R2> {
1846
1855
  return Effect.flatMap(this._get, (ref) => ref.runUpdates(run))
1847
1856
  }
@@ -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
1931
  readonly version: Effect.Effect<number, E, I | R>
1923
1932
 
1924
- private _get: Effect.Effect<Computed<R, E, A>, never, I>
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,7 +1942,7 @@ 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<unknown, never, I | R | Scope.Scope | R3> {
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
 
@@ -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
1974
  readonly version: Effect.Effect<number, E, I | R>
1966
1975
 
1967
- private _get: Effect.Effect<Filtered<R, E, A>, never, I>
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,7 +1985,7 @@ 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<unknown, never, I | R | Scope.Scope | R3> {
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
 
@@ -1984,7 +1993,7 @@ class FilteredFromTag<I, S, R, E, A> extends FxEffectBase<
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,35 +2003,35 @@ 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
2011
  <R2, S>(layer: Layer.Layer<S, never, R2>): {
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>
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>
2028
+ ): RefSubject<A, E, Exclude<R, S>>
2020
2029
 
2021
- <R, E, A, R2, S>(filtered: Filtered<R, E, A>, layer: Layer.Layer<S, never, R2>): Filtered<Exclude<R, S> | R2, E, A>
2022
- <R, E, A, R2, S>(computed: Computed<R, E, A>, layer: Layer.Layer<S, never, R2>): Computed<Exclude<R, S> | R2, E, A>
2023
- <R, E, A, R2, S>(ref: RefSubject<R, E, A>, layer: Layer.Layer<S, never, R2>): 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>,
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>,
2026
2035
  providing: Layer.Layer<S, never, R2> | C.Context<S> | Runtime.Runtime<S>
2027
2036
  ) {
2028
2037
  const layer = Layer.isLayer(providing)
@@ -2040,13 +2049,13 @@ 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
@@ -2055,7 +2064,7 @@ class RefSubjectProvide<R, E, A, R2, S> extends FxEffectBase<
2055
2064
  readonly subscriberCount: Effect.Effect<number, never, Exclude<R, S> | R2>
2056
2065
 
2057
2066
  constructor(
2058
- readonly ref: RefSubject<R, E, A>,
2067
+ readonly ref: RefSubject<A, E, R>,
2059
2068
  readonly layer: Layer.Layer<S, never, R2>
2060
2069
  ) {
2061
2070
  super()
@@ -2065,7 +2074,7 @@ class RefSubjectProvide<R, E, A, R2, S> extends FxEffectBase<
2065
2074
  }
2066
2075
 
2067
2076
  run<R3>(
2068
- sink: Sink.Sink<R3, E, A>
2077
+ sink: Sink.Sink<A, E, R3>
2069
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
  }
@@ -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<boolean, E, R> = <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<boolean, E, R> = <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<boolean, E, R> = <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<number, E, R> = <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<number, E, R> = <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
2168
  readonly version: Effect.Effect<number, E, R>
2160
2169
  readonly interrupt: Effect.Effect<void, never, R>
2161
2170
  readonly subscriberCount: Effect.Effect<number, never, R>
2162
- private _fx: Fx<Scope.Scope | R, E, A>
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,7 +2184,7 @@ 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<unknown, never, R | R2 | Scope.Scope> {
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
 
@@ -2183,8 +2192,8 @@ class RefSubjectSlice<R, E, A> extends FxEffectBase<R | Scope.Scope, E, A, R, E,
2183
2192
  return this.ref
2184
2193
  }
2185
2194
 
2186
- runUpdates<R2, E2, C>(
2187
- run: (ref: GetSetDelete<R, E, A>) => Effect.Effect<C, E2, R2>
2195
+ runUpdates<E2, R2, C>(
2196
+ run: (ref: GetSetDelete<A, E, R>) => Effect.Effect<C, E2, R2>
2188
2197
  ): Effect.Effect<C, E2, R | R2> {
2189
2198
  return this.ref.runUpdates(run)
2190
2199
  }