@typed/fx 1.22.2 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/cjs/AsyncData.js.map +1 -1
  2. package/dist/cjs/Form.js.map +1 -1
  3. package/dist/cjs/FormEntry.js.map +1 -1
  4. package/dist/cjs/Fx.js +1 -1
  5. package/dist/cjs/Fx.js.map +1 -1
  6. package/dist/cjs/Idle.js.map +1 -1
  7. package/dist/cjs/Match.js.map +1 -1
  8. package/dist/cjs/Pull.js +5 -3
  9. package/dist/cjs/Pull.js.map +1 -1
  10. package/dist/cjs/RefArray.js.map +1 -1
  11. package/dist/cjs/RefChunk.js.map +1 -1
  12. package/dist/cjs/RefHashSet.js.map +1 -1
  13. package/dist/cjs/RefSubject.js +3 -2
  14. package/dist/cjs/RefSubject.js.map +1 -1
  15. package/dist/cjs/Sink.js.map +1 -1
  16. package/dist/cjs/Subject.js.map +1 -1
  17. package/dist/cjs/Versioned.js.map +1 -1
  18. package/dist/cjs/internal/core.js.map +1 -1
  19. package/dist/cjs/internal/helpers.js.map +1 -1
  20. package/dist/cjs/internal/keyed.js +1 -1
  21. package/dist/cjs/internal/keyed.js.map +1 -1
  22. package/dist/cjs/internal/provide.js.map +1 -1
  23. package/dist/cjs/internal/share.js.map +1 -1
  24. package/dist/cjs/internal/sync-producer.js.map +1 -1
  25. package/dist/dts/AsyncData.d.ts +53 -53
  26. package/dist/dts/AsyncData.d.ts.map +1 -1
  27. package/dist/dts/Emitter.d.ts +7 -7
  28. package/dist/dts/Emitter.d.ts.map +1 -1
  29. package/dist/dts/Form.d.ts +14 -14
  30. package/dist/dts/Form.d.ts.map +1 -1
  31. package/dist/dts/FormEntry.d.ts +11 -11
  32. package/dist/dts/FormEntry.d.ts.map +1 -1
  33. package/dist/dts/Fx.d.ts +417 -417
  34. package/dist/dts/Fx.d.ts.map +1 -1
  35. package/dist/dts/Guard.d.ts +21 -21
  36. package/dist/dts/Guard.d.ts.map +1 -1
  37. package/dist/dts/Idle.d.ts +12 -12
  38. package/dist/dts/Idle.d.ts.map +1 -1
  39. package/dist/dts/Match.d.ts +16 -16
  40. package/dist/dts/Match.d.ts.map +1 -1
  41. package/dist/dts/Pull.d.ts +5 -5
  42. package/dist/dts/Pull.d.ts.map +1 -1
  43. package/dist/dts/Push.d.ts +40 -40
  44. package/dist/dts/Push.d.ts.map +1 -1
  45. package/dist/dts/RefArray.d.ts +59 -59
  46. package/dist/dts/RefArray.d.ts.map +1 -1
  47. package/dist/dts/RefChunk.d.ts +45 -45
  48. package/dist/dts/RefChunk.d.ts.map +1 -1
  49. package/dist/dts/RefHashMap.d.ts +35 -35
  50. package/dist/dts/RefHashMap.d.ts.map +1 -1
  51. package/dist/dts/RefHashSet.d.ts +17 -17
  52. package/dist/dts/RefHashSet.d.ts.map +1 -1
  53. package/dist/dts/RefSubject.d.ts +136 -136
  54. package/dist/dts/RefSubject.d.ts.map +1 -1
  55. package/dist/dts/Sink.d.ts +63 -63
  56. package/dist/dts/Sink.d.ts.map +1 -1
  57. package/dist/dts/Stream.d.ts +11 -11
  58. package/dist/dts/Stream.d.ts.map +1 -1
  59. package/dist/dts/Subject.d.ts +13 -13
  60. package/dist/dts/Subject.d.ts.map +1 -1
  61. package/dist/dts/Typeclass.d.ts +1 -1
  62. package/dist/dts/Typeclass.d.ts.map +1 -1
  63. package/dist/dts/Versioned.d.ts +33 -33
  64. package/dist/dts/Versioned.d.ts.map +1 -1
  65. package/dist/dts/index.d.ts +1 -1
  66. package/dist/dts/internal/DeferredRef.d.ts +8 -8
  67. package/dist/dts/internal/DeferredRef.d.ts.map +1 -1
  68. package/dist/dts/internal/core.d.ts +191 -191
  69. package/dist/dts/internal/core.d.ts.map +1 -1
  70. package/dist/dts/internal/effect-loop-operator.d.ts +6 -6
  71. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
  72. package/dist/dts/internal/effect-operator.d.ts +16 -16
  73. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  74. package/dist/dts/internal/effect-producer.d.ts +13 -13
  75. package/dist/dts/internal/effect-producer.d.ts.map +1 -1
  76. package/dist/dts/internal/helpers.d.ts +26 -26
  77. package/dist/dts/internal/helpers.d.ts.map +1 -1
  78. package/dist/dts/internal/keyed.d.ts +1 -1
  79. package/dist/dts/internal/keyed.d.ts.map +1 -1
  80. package/dist/dts/internal/loop-operator.d.ts +2 -2
  81. package/dist/dts/internal/loop-operator.d.ts.map +1 -1
  82. package/dist/dts/internal/operator.d.ts +2 -2
  83. package/dist/dts/internal/operator.d.ts.map +1 -1
  84. package/dist/dts/internal/protos.d.ts +12 -12
  85. package/dist/dts/internal/protos.d.ts.map +1 -1
  86. package/dist/dts/internal/provide.d.ts +15 -15
  87. package/dist/dts/internal/provide.d.ts.map +1 -1
  88. package/dist/dts/internal/share.d.ts +11 -11
  89. package/dist/dts/internal/share.d.ts.map +1 -1
  90. package/dist/dts/internal/sync-operator.d.ts +2 -2
  91. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  92. package/dist/dts/internal/sync-producer.d.ts +6 -6
  93. package/dist/dts/internal/sync-producer.d.ts.map +1 -1
  94. package/dist/dts/internal/withKey.d.ts +1 -1
  95. package/dist/dts/internal/withKey.d.ts.map +1 -1
  96. package/dist/esm/AsyncData.js.map +1 -1
  97. package/dist/esm/Form.js.map +1 -1
  98. package/dist/esm/FormEntry.js.map +1 -1
  99. package/dist/esm/Fx.js +1 -1
  100. package/dist/esm/Fx.js.map +1 -1
  101. package/dist/esm/Idle.js.map +1 -1
  102. package/dist/esm/Match.js.map +1 -1
  103. package/dist/esm/Pull.js +3 -3
  104. package/dist/esm/Pull.js.map +1 -1
  105. package/dist/esm/RefArray.js.map +1 -1
  106. package/dist/esm/RefChunk.js.map +1 -1
  107. package/dist/esm/RefHashSet.js.map +1 -1
  108. package/dist/esm/RefSubject.js +3 -1
  109. package/dist/esm/RefSubject.js.map +1 -1
  110. package/dist/esm/Sink.js.map +1 -1
  111. package/dist/esm/Subject.js.map +1 -1
  112. package/dist/esm/Versioned.js.map +1 -1
  113. package/dist/esm/index.js +1 -1
  114. package/dist/esm/internal/core.js.map +1 -1
  115. package/dist/esm/internal/helpers.js.map +1 -1
  116. package/dist/esm/internal/keyed.js +1 -1
  117. package/dist/esm/internal/keyed.js.map +1 -1
  118. package/dist/esm/internal/provide.js.map +1 -1
  119. package/dist/esm/internal/share.js.map +1 -1
  120. package/dist/esm/internal/sync-producer.js.map +1 -1
  121. package/package.json +6 -6
  122. package/src/AsyncData.ts +142 -144
  123. package/src/Emitter.ts +13 -13
  124. package/src/Form.ts +55 -55
  125. package/src/FormEntry.ts +39 -39
  126. package/src/Fx.ts +788 -789
  127. package/src/Guard.ts +43 -43
  128. package/src/Idle.ts +26 -26
  129. package/src/Match.ts +60 -61
  130. package/src/Pull.ts +42 -43
  131. package/src/Push.ts +195 -195
  132. package/src/RefArray.ts +121 -119
  133. package/src/RefChunk.ts +98 -97
  134. package/src/RefHashMap.ts +79 -79
  135. package/src/RefHashSet.ts +40 -39
  136. package/src/RefSubject.ts +574 -565
  137. package/src/Sink.ts +303 -303
  138. package/src/Stream.ts +27 -27
  139. package/src/Subject.ts +48 -46
  140. package/src/Typeclass.ts +2 -2
  141. package/src/Versioned.ts +97 -97
  142. package/src/index.ts +1 -1
  143. package/src/internal/DeferredRef.ts +7 -7
  144. package/src/internal/core.ts +768 -781
  145. package/src/internal/effect-loop-operator.ts +7 -7
  146. package/src/internal/effect-operator.ts +23 -23
  147. package/src/internal/effect-producer.ts +38 -38
  148. package/src/internal/helpers.ts +51 -51
  149. package/src/internal/keyed.ts +21 -21
  150. package/src/internal/loop-operator.ts +2 -2
  151. package/src/internal/operator.ts +2 -2
  152. package/src/internal/protos.ts +15 -15
  153. package/src/internal/provide.ts +27 -27
  154. package/src/internal/share.ts +25 -25
  155. package/src/internal/sync-operator.ts +4 -4
  156. package/src/internal/sync-producer.ts +15 -15
  157. package/src/internal/withKey.ts +13 -13
package/src/Stream.ts CHANGED
@@ -19,8 +19,8 @@ import * as Sink from "./Sink.js"
19
19
  * @since 1.18.0
20
20
  * @category conversions
21
21
  */
22
- export function toStream<R, E, A>(fx: Fx.Fx<R, E, A>): Stream.Stream<R, E, A> {
23
- return Stream.asyncScoped<R | Scope.Scope, E, A>((emit) =>
22
+ export function toStream<A, E, R>(fx: Fx.Fx<A, E, R>): Stream.Stream<A, E, R> {
23
+ return Stream.asyncScoped<A, E, R | Scope.Scope>((emit) =>
24
24
  fx.run(
25
25
  Sink.make(
26
26
  (cause) => Effect.promise(() => emit(Effect.failCause(Cause.map(cause, Option.some)))),
@@ -42,17 +42,17 @@ export function toStream<R, E, A>(fx: Fx.Fx<R, E, A>): Stream.Stream<R, E, A> {
42
42
  */
43
43
  export const toStreamQueued: {
44
44
  <E, A, R2, E2>(
45
- make: Effect.Effect<R2, E2, Queue.Queue<Exit.Exit<Option.Option<E>, A>>>
46
- ): <R>(fx: Fx.Fx<R, E, A>) => Stream.Stream<R | R2, E | E2, A>
45
+ make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
46
+ ): <R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E | E2, R | R2>
47
47
 
48
- <R, E, A, R2, E2>(
49
- fx: Fx.Fx<R, E, A>,
50
- make: Effect.Effect<R2, E2, Queue.Queue<Exit.Exit<Option.Option<E>, A>>>
51
- ): Stream.Stream<R | R2, E | E2, A>
52
- } = dual(2, function toStreamQueued<R, E, A, R2, E2>(
53
- fx: Fx.Fx<R, E, A>,
54
- make: Effect.Effect<R2, E2, Queue.Queue<Exit.Exit<Option.Option<E>, A>>>
55
- ): Stream.Stream<R | R2, E | E2, A> {
48
+ <A, E, R, R2, E2>(
49
+ fx: Fx.Fx<A, E, R>,
50
+ make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
51
+ ): Stream.Stream<A, E | E2, R | R2>
52
+ } = dual(2, function toStreamQueued<A, E, R, R2, E2>(
53
+ fx: Fx.Fx<A, E, R>,
54
+ make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
55
+ ): Stream.Stream<A, E | E2, R | R2> {
56
56
  return make.pipe(
57
57
  Effect.tap((queue) =>
58
58
  fx.pipe(
@@ -76,11 +76,11 @@ export const toStreamQueued: {
76
76
  * @category conversions
77
77
  */
78
78
  export const toStreamSliding: {
79
- (capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<R, E, A>
80
- <R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<R, E, A>
79
+ (capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E, R>
80
+ <A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R>
81
81
  } = dual(
82
82
  2,
83
- function toStreamSliding<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<R, E, A> {
83
+ function toStreamSliding<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R> {
84
84
  return toStreamQueued(fx, Queue.sliding(capacity))
85
85
  }
86
86
  )
@@ -92,11 +92,11 @@ export const toStreamSliding: {
92
92
  * @category conversions
93
93
  */
94
94
  export const toStreamDropping: {
95
- (capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<R, E, A>
96
- <R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<R, E, A>
95
+ (capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E, R>
96
+ <A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R>
97
97
  } = dual(
98
98
  2,
99
- function toStreamDropping<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<R, E, A> {
99
+ function toStreamDropping<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R> {
100
100
  return toStreamQueued(fx, Queue.dropping(capacity))
101
101
  }
102
102
  )
@@ -108,11 +108,11 @@ export const toStreamDropping: {
108
108
  * @category conversions
109
109
  */
110
110
  export const toStreamBounded: {
111
- (capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<R, E, A>
112
- <R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<R, E, A>
111
+ (capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E, R>
112
+ <A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R>
113
113
  } = dual(
114
114
  2,
115
- function toStreamBounded<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<R, E, A> {
115
+ function toStreamBounded<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R> {
116
116
  return toStreamQueued(fx, Queue.bounded(capacity))
117
117
  }
118
118
  )
@@ -122,10 +122,10 @@ export const toStreamBounded: {
122
122
  * @since 1.18.0
123
123
  * @category conversions
124
124
  */
125
- export function fromStream<R, E, A>(
126
- stream: Stream.Stream<R, E, A>
127
- ): Fx.Fx<R, E, A> {
128
- return Fx.make<R, E, A>((sink) => Effect.catchAllCause(Stream.runForEach(stream, sink.onSuccess), sink.onFailure))
125
+ export function fromStream<A, E, R>(
126
+ stream: Stream.Stream<A, E, R>
127
+ ): Fx.Fx<A, E, R> {
128
+ return Fx.make<A, E, R>((sink) => Effect.catchAllCause(Stream.runForEach(stream, sink.onSuccess), sink.onFailure))
129
129
  }
130
130
 
131
131
  /**
@@ -133,8 +133,8 @@ export function fromStream<R, E, A>(
133
133
  * @since 1.18.0
134
134
  * @category conversions
135
135
  */
136
- export function fromStreamChunked<R, E, A>(stream: Stream.Stream<R, E, A>): Fx.Fx<R, E, Chunk.Chunk<A>> {
137
- return Fx.make<R, E, Chunk.Chunk<A>>((sink) =>
136
+ export function fromStreamChunked<A, E, R>(stream: Stream.Stream<A, E, R>): Fx.Fx<Chunk.Chunk<A>, E, R> {
137
+ return Fx.make<Chunk.Chunk<A>, E, R>((sink) =>
138
138
  Effect.catchAllCause(Stream.runForEachChunk(stream, sink.onSuccess), sink.onFailure)
139
139
  )
140
140
  }
package/src/Subject.ts CHANGED
@@ -26,9 +26,11 @@ import { TypeId } from "./TypeId.js"
26
26
  * Subject is an Fx type which can also be imperatively pushed into.
27
27
  * @since 1.20.0
28
28
  */
29
- export interface Subject<out R, in out E, in out A> extends Push<R, E, A, R | Scope.Scope, E, A>, Pipeable.Pipeable {
30
- readonly subscriberCount: Effect.Effect<R, never, number>
31
- readonly interrupt: Effect.Effect<R, never, void>
29
+ export interface Subject<in out A, in out E = never, out R = never>
30
+ extends Push<A, E, R, A, E, R | Scope.Scope>, Pipeable.Pipeable
31
+ {
32
+ readonly subscriberCount: Effect.Effect<number, never, R>
33
+ readonly interrupt: Effect.Effect<void, never, R>
32
34
  }
33
35
 
34
36
  /**
@@ -38,10 +40,10 @@ export namespace Subject {
38
40
  /**
39
41
  * @since 1.20.0
40
42
  */
41
- export interface Tagged<I, E, A> extends Subject<I, E, A> {
42
- readonly tag: C.Tagged<I, Subject<never, E, A>>
43
+ export interface Tagged<A, E, I> extends Subject<A, E, I> {
44
+ readonly tag: C.Tagged<I, Subject<A, E>>
43
45
 
44
- readonly make: (replay?: number) => Layer.Layer<never, never, I>
46
+ readonly make: (replay?: number) => Layer.Layer<I>
45
47
  readonly provide: Provide<I>
46
48
  }
47
49
 
@@ -62,11 +64,11 @@ export namespace Subject {
62
64
  ...args: Args
63
65
  ) => Args extends readonly [infer _ extends number] ? <T extends Fx<any, any, any> | Effect.Effect<any, any, any>>(
64
66
  fxOrEffect: T
65
- ) => [T] extends [Fx<infer R2, infer E2, infer B>] ? Fx<Exclude<R2, I>, E2, B>
66
- : [T] extends [Effect.Effect<infer R2, infer E2, infer B>] ? Effect.Effect<Exclude<R2, I>, E2, B>
67
+ ) => [T] extends [Fx<infer B, infer E2, infer R2>] ? Fx<B, E2, Exclude<R2, I>>
68
+ : [T] extends [Effect.Effect<infer B, infer E2, infer R2>] ? Effect.Effect<B, E2, Exclude<R2, I>>
67
69
  : never
68
- : Args extends readonly [Fx<infer R2, infer E2, infer B>] ? Fx<Exclude<R2, I>, E2, B>
69
- : Args extends readonly [Effect.Effect<infer R2, infer E2, infer B>] ? Effect.Effect<Exclude<R2, I>, E2, B>
70
+ : Args extends readonly [Fx<infer B, infer E2, infer R2>] ? Fx<B, E2, Exclude<R2, I>>
71
+ : Args extends readonly [Effect.Effect<infer B, infer E2, infer R2>] ? Effect.Effect<B, E2, Exclude<R2, I>>
70
72
  : never
71
73
  }
72
74
 
@@ -75,8 +77,8 @@ const DISCARD = { discard: true } as const
75
77
  /**
76
78
  * @internal
77
79
  */
78
- export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subject<never, E, A> {
79
- protected sinks: Set<readonly [Sink<any, E, A>, Context.Context<any>]> = new Set()
80
+ export class SubjectImpl<A, E> extends FxBase<A, E, Scope.Scope> implements Subject<A, E> {
81
+ protected sinks: Set<readonly [Sink<A, E, any>, Context.Context<any>]> = new Set()
80
82
  protected scopes: Set<Scope.CloseableScope> = new Set()
81
83
 
82
84
  constructor() {
@@ -85,7 +87,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
85
87
  this.onSuccess = this.onSuccess.bind(this)
86
88
  }
87
89
 
88
- run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R2 | Scope.Scope, never, unknown> {
90
+ run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
89
91
  return this.addSink(sink, awaitScopeClose)
90
92
  }
91
93
 
@@ -110,9 +112,9 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
110
112
  )
111
113
 
112
114
  protected addSink<R, R2, B>(
113
- sink: Sink<R, E, A>,
114
- f: (scope: Scope.Scope) => Effect.Effect<R2, never, B>
115
- ): Effect.Effect<R2 | Scope.Scope, never, B> {
115
+ sink: Sink<A, E, R>,
116
+ f: (scope: Scope.Scope) => Effect.Effect<B, never, R2>
117
+ ): Effect.Effect<B, never, R2 | Scope.Scope> {
116
118
  return withScope(
117
119
  (innerScope) =>
118
120
  Effect.contextWithEffect((ctx) => {
@@ -135,7 +137,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
135
137
  )
136
138
  }
137
139
 
138
- readonly subscriberCount: Effect.Effect<never, never, number> = Effect.sync(() => this.sinks.size)
140
+ readonly subscriberCount: Effect.Effect<number> = Effect.sync(() => this.sinks.size)
139
141
 
140
142
  protected onEvent(a: A) {
141
143
  if (this.sinks.size === 0) return Effect.unit
@@ -156,7 +158,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
156
158
  /**
157
159
  * @internal
158
160
  */
159
- export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<never, E, A> {
161
+ export class HoldSubjectImpl<A, E> extends SubjectImpl<A, E> implements Subject<A, E> {
160
162
  private lastValue: MutableRef.MutableRef<Option.Option<A>> = MutableRef.make(Option.none())
161
163
 
162
164
  // Emit an event to all sinks
@@ -167,7 +169,7 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
167
169
  return this.onEvent(a)
168
170
  })
169
171
 
170
- run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R2 | Scope.Scope, never, unknown> {
172
+ run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
171
173
  return this.addSink(sink, (scope) =>
172
174
  Option.match(MutableRef.get(this.lastValue), {
173
175
  onNone: () => awaitScopeClose(scope),
@@ -186,7 +188,7 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
186
188
  /**
187
189
  * @internal
188
190
  */
189
- export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
191
+ export class ReplaySubjectImpl<A, E> extends SubjectImpl<A, E> {
190
192
  constructor(readonly buffer: RingBuffer<A>) {
191
193
  super()
192
194
  }
@@ -199,7 +201,7 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
199
201
  return this.onEvent(a)
200
202
  })
201
203
 
202
- run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R2 | Scope.Scope, never, unknown> {
204
+ run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
203
205
  return this.addSink(
204
206
  sink,
205
207
  (scope) => Effect.zipRight(this.buffer.forEach((a) => sink.onSuccess(a)), awaitScopeClose(scope))
@@ -217,39 +219,39 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
217
219
  /**
218
220
  * @since 1.20.0
219
221
  */
220
- export function unsafeMake<E, A>(replay: number = 0): Subject<never, E, A> {
222
+ export function unsafeMake<A, E = never>(replay: number = 0): Subject<A, E> {
221
223
  replay = Math.max(0, replay)
222
224
 
223
225
  if (replay === 0) {
224
- return new SubjectImpl<E, A>()
226
+ return new SubjectImpl<A, E>()
225
227
  } else if (replay === 1) {
226
- return new HoldSubjectImpl<E, A>()
228
+ return new HoldSubjectImpl<A, E>()
227
229
  } else {
228
- return new ReplaySubjectImpl<E, A>(new RingBuffer(replay))
230
+ return new ReplaySubjectImpl<A, E>(new RingBuffer(replay))
229
231
  }
230
232
  }
231
233
 
232
234
  /**
233
235
  * @since 1.20.0
234
236
  */
235
- export function make<E, A>(replay?: number): Effect.Effect<Scope.Scope, never, Subject<never, E, A>> {
237
+ export function make<A, E>(replay?: number): Effect.Effect<Subject<A, E>, never, Scope.Scope> {
236
238
  return Effect.acquireRelease(Effect.sync(() => unsafeMake(replay)), (subject) => subject.interrupt)
237
239
  }
238
240
 
239
241
  /**
240
242
  * @since 1.20.0
241
243
  */
242
- export function fromTag<I, S, R, E, A>(tag: C.Tag<I, S>, f: (s: S) => Subject<R, E, A>): Subject<I | R, E, A> {
244
+ export function fromTag<I, S, A, E, R>(tag: C.Tag<I, S>, f: (s: S) => Subject<A, E, R>): Subject<A, E, I | R> {
243
245
  return new FromTag(tag, f)
244
246
  }
245
247
 
246
- class FromTag<I, S, R, E, A> extends FxBase<I | R | Scope.Scope, E, A> implements Subject<I | R, E, A> {
247
- private get: Effect.Effect<I, never, Subject<R, E, A>>
248
+ class FromTag<I, S, A, E, R> extends FxBase<A, E, I | R | Scope.Scope> implements Subject<A, E, I | R> {
249
+ private get: Effect.Effect<Subject<A, E, R>, never, I>
248
250
 
249
- readonly subscriberCount: Effect.Effect<I | R, never, number>
250
- readonly interrupt: Effect.Effect<I | R, never, void>
251
+ readonly subscriberCount: Effect.Effect<number, never, I | R>
252
+ readonly interrupt: Effect.Effect<void, never, I | R>
251
253
 
252
- constructor(readonly tag: C.Tag<I, S>, readonly f: (s: S) => Subject<R, E, A>) {
254
+ constructor(readonly tag: C.Tag<I, S>, readonly f: (s: S) => Subject<A, E, R>) {
253
255
  super()
254
256
 
255
257
  this.get = Effect.map(tag, f)
@@ -257,15 +259,15 @@ class FromTag<I, S, R, E, A> extends FxBase<I | R | Scope.Scope, E, A> implement
257
259
  this.interrupt = Effect.flatMap(this.get, (subject) => subject.interrupt)
258
260
  }
259
261
 
260
- run<R2>(sink: Sink<R2, E, A>): Effect.Effect<I | R | R2 | Scope.Scope, never, unknown> {
262
+ run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, I | R | R2 | Scope.Scope> {
261
263
  return Effect.flatMap(this.get, (subject) => subject.run(sink))
262
264
  }
263
265
 
264
- onFailure(cause: Cause.Cause<E>): Effect.Effect<I | R, never, unknown> {
266
+ onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, I | R> {
265
267
  return Effect.flatMap(this.get, (subject) => subject.onFailure(cause))
266
268
  }
267
269
 
268
- onSuccess(value: A): Effect.Effect<I | R, never, unknown> {
270
+ onSuccess(value: A): Effect.Effect<unknown, never, I | R> {
269
271
  return Effect.flatMap(this.get, (subject) => subject.onSuccess(value))
270
272
  }
271
273
  }
@@ -273,32 +275,32 @@ class FromTag<I, S, R, E, A> extends FxBase<I | R | Scope.Scope, E, A> implement
273
275
  /**
274
276
  * @since 1.20.0
275
277
  */
276
- export function tagged<E, A>(): {
277
- <const I extends C.IdentifierFactory<any>>(identifier: I): Subject.Tagged<C.IdentifierOf<I>, E, A>
278
- <const I>(identifier: I): Subject.Tagged<C.IdentifierOf<I>, E, A>
278
+ export function tagged<A, E = never>(): {
279
+ <const I extends C.IdentifierFactory<any>>(identifier: I): Subject.Tagged<A, E, C.IdentifierOf<I>>
280
+ <const I>(identifier: I): Subject.Tagged<A, E, C.IdentifierOf<I>>
279
281
  } {
280
- return <const I>(identifier: I) => new TaggedImpl(C.Tagged<I, Subject<never, E, A>>(identifier))
282
+ return <const I>(identifier: I) => new TaggedImpl(C.Tagged<I, Subject<A, E>>(identifier))
281
283
  }
282
284
 
283
285
  const isDataFirst = (args: IArguments): boolean =>
284
286
  args.length === 2 || Effect.isEffect(args[0]) || hasProperty(args[0], TypeId)
285
287
 
286
- class TaggedImpl<I, E, A> extends FromTag<I, Subject<never, E, A>, never, E, A> implements Subject.Tagged<I, E, A> {
287
- readonly provide: Subject.Tagged<I, E, A>["provide"]
288
+ class TaggedImpl<A, E, I> extends FromTag<I, Subject<A, E>, A, E, never> implements Subject.Tagged<A, E, I> {
289
+ readonly provide: Subject.Tagged<A, E, I>["provide"]
288
290
 
289
- constructor(readonly tag: C.Tagged<I, Subject<never, E, A>>) {
291
+ constructor(readonly tag: C.Tagged<I, Subject<A, E>>) {
290
292
  super(tag, identity)
291
293
 
292
294
  this.provide = dual(
293
295
  isDataFirst,
294
- <R2, E2, B>(fxOrEffect: Fx<R2, E2, B> | Effect.Effect<R2, E2, B>, replay?: number) => {
295
- if (TypeId in fxOrEffect) return provide(fxOrEffect as Fx<Exclude<R2, I>, E2, B>, this.make(replay))
296
- else return Effect.provide(fxOrEffect as Effect.Effect<R2, E2, B>, this.make(replay))
296
+ <B, E2, R2>(fxOrEffect: Fx<B, E2, R2> | Effect.Effect<B, E2, R2>, replay?: number) => {
297
+ if (TypeId in fxOrEffect) return provide(fxOrEffect as Fx<B, E2, Exclude<R2, I>>, this.make(replay))
298
+ else return Effect.provide(fxOrEffect as Effect.Effect<B, E2, R2>, this.make(replay))
297
299
  }
298
300
  )
299
301
  }
300
302
 
301
- make(replay?: number): Layer.Layer<never, never, I> {
303
+ make(replay?: number): Layer.Layer<I> {
302
304
  return this.tag.scoped(make(replay))
303
305
  }
304
306
  }
package/src/Typeclass.ts CHANGED
@@ -33,7 +33,7 @@ import { multicast } from "./internal/share.js"
33
33
  * @category TypeLambda
34
34
  */
35
35
  export interface FxTypeLambda extends HKT.TypeLambda {
36
- readonly type: Fx.Fx<this["Out2"], this["Out1"], this["Target"]>
36
+ readonly type: Fx.Fx<this["Target"], this["Out1"], this["Out2"]>
37
37
  }
38
38
 
39
39
  /**
@@ -302,7 +302,7 @@ export const Applicative: App.Applicative<FxTypeLambda> = {
302
302
  * @category Filterable
303
303
  */
304
304
  export const Filterable: Filter.Filterable<FxTypeLambda> = {
305
- partitionMap: dual(2, <R, E, A, B, C>(self: Fx.Fx<R, E, A>, f: (a: A) => Either<B, C>) => {
305
+ partitionMap: dual(2, <A, E, R, B, C>(self: Fx.Fx<A, E, R>, f: (a: A) => Either<B, C>) => {
306
306
  const m = multicast(Fx.map(self, f))
307
307
 
308
308
  return [