@fncts/io 0.0.37 → 0.0.39

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 (173) hide show
  1. package/Channel/definition.d.ts +108 -104
  2. package/FiberRef/unsafe.d.ts +5 -0
  3. package/Future/definition.d.ts +24 -3
  4. package/IO/api/all.d.ts +14 -15
  5. package/IO/definition.d.ts +17 -15
  6. package/_cjs/Channel/api/mapOutConcurrentIO.cjs +8 -2
  7. package/_cjs/Channel/api/mapOutConcurrentIO.cjs.map +1 -1
  8. package/_cjs/Channel/api/mergeAllWith.cjs +23 -14
  9. package/_cjs/Channel/api/mergeAllWith.cjs.map +1 -1
  10. package/_cjs/Channel/api/mergeWith.cjs +16 -4
  11. package/_cjs/Channel/api/mergeWith.cjs.map +1 -1
  12. package/_cjs/Channel/api.cjs +131 -36
  13. package/_cjs/Channel/api.cjs.map +1 -1
  14. package/_cjs/Channel/core-api.cjs +13 -3
  15. package/_cjs/Channel/core-api.cjs.map +1 -1
  16. package/_cjs/Channel/definition.cjs +18 -143
  17. package/_cjs/Channel/definition.cjs.map +1 -1
  18. package/_cjs/Channel/internal/ChannelExecutor.cjs +51 -49
  19. package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
  20. package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs +8 -2
  21. package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs.map +1 -1
  22. package/_cjs/Console/live.cjs +1 -1
  23. package/_cjs/Console/live.cjs.map +1 -1
  24. package/_cjs/Fiber/FiberRuntime.cjs +23 -18
  25. package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
  26. package/_cjs/FiberRef/definition.cjs +3 -1
  27. package/_cjs/FiberRef/definition.cjs.map +1 -1
  28. package/_cjs/FiberRef/unsafe.cjs +6 -1
  29. package/_cjs/FiberRef/unsafe.cjs.map +1 -1
  30. package/_cjs/Future/api.cjs +12 -12
  31. package/_cjs/Future/api.cjs.map +1 -1
  32. package/_cjs/Future/definition.cjs +10 -3
  33. package/_cjs/Future/definition.cjs.map +1 -1
  34. package/_cjs/IO/api/all.cjs +4 -4
  35. package/_cjs/IO/api/all.cjs.map +1 -1
  36. package/_cjs/IO/api/asyncInterrupt.cjs +7 -4
  37. package/_cjs/IO/api/asyncInterrupt.cjs.map +1 -1
  38. package/_cjs/IO/api.cjs +38 -14
  39. package/_cjs/IO/api.cjs.map +1 -1
  40. package/_cjs/IO/definition.cjs.map +1 -1
  41. package/_cjs/IO/runtime.cjs +6 -3
  42. package/_cjs/IO/runtime.cjs.map +1 -1
  43. package/_cjs/Layer/api.cjs +4 -1
  44. package/_cjs/Layer/api.cjs.map +1 -1
  45. package/_cjs/Push/api.cjs +4 -1
  46. package/_cjs/Push/api.cjs.map +1 -1
  47. package/_cjs/Ref/Derived.cjs +35 -8
  48. package/_cjs/Ref/Derived.cjs.map +1 -1
  49. package/_cjs/Ref/DerivedAll.cjs +35 -8
  50. package/_cjs/Ref/DerivedAll.cjs.map +1 -1
  51. package/_cjs/RuntimeFlags/RuntimeFlags.cjs +3 -4
  52. package/_cjs/RuntimeFlags/RuntimeFlags.cjs.map +1 -1
  53. package/_cjs/STM/api/core-api.cjs +4 -1
  54. package/_cjs/STM/api/core-api.cjs.map +1 -1
  55. package/_cjs/STM/api.cjs +16 -4
  56. package/_cjs/STM/api.cjs.map +1 -1
  57. package/_cjs/Schedule/api.cjs +7 -1
  58. package/_cjs/Schedule/api.cjs.map +1 -1
  59. package/_cjs/ScopedRef/api.cjs +2 -2
  60. package/_cjs/ScopedRef/api.cjs.map +1 -1
  61. package/_cjs/Sink/api.cjs +7 -1
  62. package/_cjs/Sink/api.cjs.map +1 -1
  63. package/_cjs/Stream/api/zipAllWith.cjs +4 -1
  64. package/_cjs/Stream/api/zipAllWith.cjs.map +1 -1
  65. package/_cjs/Stream/api/zipWithChunks.cjs +4 -1
  66. package/_cjs/Stream/api/zipWithChunks.cjs.map +1 -1
  67. package/_cjs/Stream/api.cjs +36 -15
  68. package/_cjs/Stream/api.cjs.map +1 -1
  69. package/_cjs/SupervisorPatch.cjs +38 -15
  70. package/_cjs/SupervisorPatch.cjs.map +1 -1
  71. package/_cjs/TRef/definition.cjs +74 -20
  72. package/_cjs/TRef/definition.cjs.map +1 -1
  73. package/_mjs/Channel/api/mapOutConcurrentIO.mjs +8 -2
  74. package/_mjs/Channel/api/mapOutConcurrentIO.mjs.map +1 -1
  75. package/_mjs/Channel/api/mergeAllWith.mjs +23 -14
  76. package/_mjs/Channel/api/mergeAllWith.mjs.map +1 -1
  77. package/_mjs/Channel/api/mergeWith.mjs +16 -4
  78. package/_mjs/Channel/api/mergeWith.mjs.map +1 -1
  79. package/_mjs/Channel/api.mjs +132 -37
  80. package/_mjs/Channel/api.mjs.map +1 -1
  81. package/_mjs/Channel/core-api.mjs +14 -4
  82. package/_mjs/Channel/core-api.mjs.map +1 -1
  83. package/_mjs/Channel/definition.mjs +14 -135
  84. package/_mjs/Channel/definition.mjs.map +1 -1
  85. package/_mjs/Channel/internal/ChannelExecutor.mjs +52 -50
  86. package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
  87. package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs +8 -2
  88. package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs.map +1 -1
  89. package/_mjs/Console/live.mjs +1 -1
  90. package/_mjs/Console/live.mjs.map +1 -1
  91. package/_mjs/Fiber/FiberRuntime.mjs +23 -18
  92. package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
  93. package/_mjs/FiberRef/definition.mjs +3 -1
  94. package/_mjs/FiberRef/definition.mjs.map +1 -1
  95. package/_mjs/FiberRef/unsafe.mjs +4 -0
  96. package/_mjs/FiberRef/unsafe.mjs.map +1 -1
  97. package/_mjs/Future/api.mjs +12 -12
  98. package/_mjs/Future/api.mjs.map +1 -1
  99. package/_mjs/Future/definition.mjs +7 -2
  100. package/_mjs/Future/definition.mjs.map +1 -1
  101. package/_mjs/IO/api/all.mjs +4 -4
  102. package/_mjs/IO/api/all.mjs.map +1 -1
  103. package/_mjs/IO/api/asyncInterrupt.mjs +7 -4
  104. package/_mjs/IO/api/asyncInterrupt.mjs.map +1 -1
  105. package/_mjs/IO/api.mjs +38 -14
  106. package/_mjs/IO/api.mjs.map +1 -1
  107. package/_mjs/IO/definition.mjs.map +1 -1
  108. package/_mjs/IO/runtime.mjs +6 -3
  109. package/_mjs/IO/runtime.mjs.map +1 -1
  110. package/_mjs/Layer/api.mjs +4 -1
  111. package/_mjs/Layer/api.mjs.map +1 -1
  112. package/_mjs/Push/api.mjs +4 -1
  113. package/_mjs/Push/api.mjs.map +1 -1
  114. package/_mjs/Ref/Derived.mjs +35 -8
  115. package/_mjs/Ref/Derived.mjs.map +1 -1
  116. package/_mjs/Ref/DerivedAll.mjs +35 -8
  117. package/_mjs/Ref/DerivedAll.mjs.map +1 -1
  118. package/_mjs/RuntimeFlags/RuntimeFlags.mjs +3 -4
  119. package/_mjs/RuntimeFlags/RuntimeFlags.mjs.map +1 -1
  120. package/_mjs/STM/api/core-api.mjs +4 -1
  121. package/_mjs/STM/api/core-api.mjs.map +1 -1
  122. package/_mjs/STM/api.mjs +16 -4
  123. package/_mjs/STM/api.mjs.map +1 -1
  124. package/_mjs/Schedule/api.mjs +7 -1
  125. package/_mjs/Schedule/api.mjs.map +1 -1
  126. package/_mjs/ScopedRef/api.mjs +2 -2
  127. package/_mjs/ScopedRef/api.mjs.map +1 -1
  128. package/_mjs/Sink/api.mjs +7 -1
  129. package/_mjs/Sink/api.mjs.map +1 -1
  130. package/_mjs/Stream/api/zipAllWith.mjs +4 -1
  131. package/_mjs/Stream/api/zipAllWith.mjs.map +1 -1
  132. package/_mjs/Stream/api/zipWithChunks.mjs +4 -1
  133. package/_mjs/Stream/api/zipWithChunks.mjs.map +1 -1
  134. package/_mjs/Stream/api.mjs +36 -15
  135. package/_mjs/Stream/api.mjs.map +1 -1
  136. package/_mjs/SupervisorPatch.mjs +38 -15
  137. package/_mjs/SupervisorPatch.mjs.map +1 -1
  138. package/_mjs/TRef/definition.mjs +74 -20
  139. package/_mjs/TRef/definition.mjs.map +1 -1
  140. package/_src/Channel/api/mapOutConcurrentIO.ts +5 -5
  141. package/_src/Channel/api/mergeAllWith.ts +9 -9
  142. package/_src/Channel/api/mergeWith.ts +16 -16
  143. package/_src/Channel/api.ts +128 -143
  144. package/_src/Channel/core-api.ts +17 -14
  145. package/_src/Channel/definition.ts +187 -236
  146. package/_src/Channel/internal/ChannelExecutor.ts +47 -45
  147. package/_src/Channel/internal/SingleProducerAsyncInput.ts +2 -2
  148. package/_src/Console/live.ts +1 -1
  149. package/_src/Fiber/FiberRuntime.ts +6 -3
  150. package/_src/FiberRef/definition.ts +4 -1
  151. package/_src/FiberRef/unsafe.ts +5 -0
  152. package/_src/Future/definition.ts +19 -3
  153. package/_src/IO/api/all.ts +14 -15
  154. package/_src/IO/api/asyncInterrupt.ts +4 -4
  155. package/_src/IO/api.ts +19 -15
  156. package/_src/IO/definition.ts +5 -3
  157. package/_src/IO/runtime.ts +6 -3
  158. package/_src/Layer/api.ts +4 -1
  159. package/_src/Push/api.ts +4 -4
  160. package/_src/Ref/Derived.ts +20 -18
  161. package/_src/Ref/DerivedAll.ts +21 -18
  162. package/_src/RuntimeFlags/RuntimeFlags.ts +1 -1
  163. package/_src/STM/api/core-api.ts +1 -1
  164. package/_src/STM/api.ts +4 -4
  165. package/_src/Schedule/api.ts +8 -8
  166. package/_src/ScopedRef/api.ts +4 -3
  167. package/_src/Sink/api.ts +8 -8
  168. package/_src/Stream/api/zipAllWith.ts +4 -4
  169. package/_src/Stream/api/zipWithChunks.ts +4 -4
  170. package/_src/Stream/api.ts +21 -19
  171. package/_src/SupervisorPatch.ts +1 -0
  172. package/_src/TRef/definition.ts +36 -33
  173. package/package.json +2 -2
@@ -8,6 +8,8 @@ import {
8
8
  BracketOut,
9
9
  Bridge,
10
10
  Channel,
11
+ ChannelPrimitive,
12
+ ChannelTag,
11
13
  ConcatAll,
12
14
  ContinuationK,
13
15
  Defer,
@@ -101,7 +103,10 @@ export function acquireReleaseOutExitWith<R, R2, E, Z>(
101
103
  self: IO<R, E, Z>,
102
104
  release: (z: Z, e: Exit<unknown, unknown>) => URIO<R2, unknown>,
103
105
  ): Channel<R | R2, unknown, unknown, unknown, E, Z, void> {
104
- return new BracketOut<R | R2, E, Z, void>(self, release);
106
+ const op = new ChannelPrimitive(ChannelTag.BracketOut);
107
+ op.i0 = self;
108
+ op.i1 = release;
109
+ return op as any;
105
110
  }
106
111
 
107
112
  /**
@@ -165,10 +170,10 @@ export function catchAll<Env1, InErr1, InElem1, InDone1, OutErr, OutErr1, OutEle
165
170
  OutDone | OutDone1
166
171
  > => {
167
172
  return self.catchAllCause((cause) =>
168
- cause.failureOrCause.match(
169
- (l) => f(l),
170
- (r) => Channel.failCauseNow(r),
171
- ),
173
+ cause.failureOrCause.match({
174
+ Left: (l) => f(l),
175
+ Right: (r) => Channel.failCauseNow(r),
176
+ }),
172
177
  );
173
178
  };
174
179
  }
@@ -194,17 +199,16 @@ export function catchAllCause<Env1, InErr1, InElem1, InDone1, OutErr, OutErr1, O
194
199
  OutElem | OutElem1,
195
200
  OutDone | OutDone1
196
201
  > => {
197
- return new Fold<
198
- Env | Env1,
199
- InErr & InErr1,
200
- InElem & InElem1,
201
- InDone & InDone1,
202
- OutErr,
203
- OutErr1,
204
- OutElem | OutElem1,
205
- OutDone | OutDone1,
206
- OutDone | OutDone1
207
- >(self, new ContinuationK((_) => Channel.endNow(_), f));
202
+ const op = new ChannelPrimitive(ChannelTag.Fold);
203
+ const continuation = new ChannelPrimitive(ChannelTag.ContinuationK);
204
+
205
+ continuation.i0 = Channel.endNow;
206
+ continuation.i1 = f;
207
+
208
+ op.i0 = self;
209
+ op.i1 = continuation;
210
+
211
+ return op as any;
208
212
  };
209
213
  }
210
214
 
@@ -254,25 +258,14 @@ export function concatMapWith<OutElem, OutElem2, OutDone, OutDone2, OutDone3, En
254
258
  return <Env, InErr, InElem, InDone, OutErr>(
255
259
  channel: Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2>,
256
260
  ): Channel<Env | Env2, InErr & InErr2, InElem & InElem2, InDone & InDone2, OutErr | OutErr2, OutElem2, OutDone3> => {
257
- return new ConcatAll<
258
- Env | Env2,
259
- InErr & InErr2,
260
- InElem & InElem2,
261
- InDone & InDone2,
262
- OutErr | OutErr2,
263
- OutElem,
264
- OutElem2,
265
- OutDone,
266
- OutDone2,
267
- OutDone3
268
- >(
269
- g,
270
- h,
271
- () => UpstreamPullStrategy.PullAfterNext(Nothing()),
272
- () => ChildExecutorDecision.Continue,
273
- channel,
274
- f,
275
- );
261
+ const op = new ChannelPrimitive(ChannelTag.ConcatAll);
262
+ op.i0 = g;
263
+ op.i1 = h;
264
+ op.i2 = () => UpstreamPullStrategy.PullAfterNext(Nothing());
265
+ op.i3 = () => ChildExecutorDecision.Continue;
266
+ op.i4 = channel;
267
+ op.i5 = f;
268
+ return op as any;
276
269
  };
277
270
  }
278
271
 
@@ -306,18 +299,14 @@ export function concatMapWithCustom<
306
299
  return <Env, InErr, InElem, InDone, OutErr>(
307
300
  channel: Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2>,
308
301
  ): Channel<Env | Env2, InErr & InErr2, InElem & InElem2, InDone & InDone2, OutErr | OutErr2, OutElem2, OutDone3> => {
309
- return new ConcatAll<
310
- Env | Env2,
311
- InErr & InErr2,
312
- InElem & InElem2,
313
- InDone & InDone2,
314
- OutErr | OutErr2,
315
- OutElem,
316
- OutElem2,
317
- OutDone,
318
- OutDone2,
319
- OutDone3
320
- >(g, h, onPull, onEmit, channel, f);
302
+ const op = new ChannelPrimitive(ChannelTag.ConcatAll);
303
+ op.i0 = g;
304
+ op.i1 = h;
305
+ op.i2 = onPull;
306
+ op.i3 = onEmit;
307
+ op.i4 = channel;
308
+ op.i5 = f;
309
+ return op as any;
321
310
  };
322
311
  }
323
312
 
@@ -341,25 +330,14 @@ export function concatAllWith<OutDone, OutDone2, OutDone3>(
341
330
  OutDone2
342
331
  >,
343
332
  ): Channel<Env | Env2, InErr & InErr2, InElem & InElem2, InDone & InDone2, OutErr | OutErr2, OutElem, OutDone3> => {
344
- return new ConcatAll<
345
- Env | Env2,
346
- InErr & InErr2,
347
- InElem & InElem2,
348
- InDone & InDone2,
349
- OutErr | OutErr2,
350
- Channel<Env2, InErr2, InElem2, InDone2, OutErr2, OutElem, OutDone>,
351
- OutElem,
352
- OutDone,
353
- OutDone2,
354
- OutDone3
355
- >(
356
- f,
357
- g,
358
- () => UpstreamPullStrategy.PullAfterNext(Nothing()),
359
- () => ChildExecutorDecision.Continue,
360
- channels,
361
- identity,
362
- );
333
+ const op = new ChannelPrimitive(ChannelTag.ConcatAll);
334
+ op.i0 = f;
335
+ op.i1 = g;
336
+ op.i2 = () => UpstreamPullStrategy.PullAfterNext(Nothing());
337
+ op.i3 = () => ChildExecutorDecision.Continue;
338
+ op.i4 = channels;
339
+ op.i5 = identity;
340
+ return op as any;
363
341
  };
364
342
  }
365
343
 
@@ -473,7 +451,9 @@ export function contramapInIO<Env1, InErr, InElem0, InElem>(f: (a: InElem0) => I
473
451
  export function defer<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
474
452
  effect: Lazy<Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>>,
475
453
  ): Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone> {
476
- return new Defer(effect);
454
+ const op = new ChannelPrimitive(ChannelTag.Defer);
455
+ op.i0 = effect;
456
+ return op as any;
477
457
  }
478
458
 
479
459
  function doneCollectReader<OutErr, OutElem, OutDone>(
@@ -562,7 +542,10 @@ export function ensuringWith<Env2, OutErr, OutDone>(finalizer: (e: Exit<OutErr,
562
542
  return <Env, InErr, InElem, InDone, OutElem>(
563
543
  channel: Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
564
544
  ): Channel<Env | Env2, InErr, InElem, InDone, OutErr, OutElem, OutDone> => {
565
- return new Ensuring<Env | Env2, InErr, InElem, InDone, OutErr, OutElem, OutDone>(channel, finalizer);
545
+ const op = new ChannelPrimitive(ChannelTag.Ensuring);
546
+ op.i0 = channel;
547
+ op.i1 = finalizer;
548
+ return op as any;
566
549
  };
567
550
  }
568
551
 
@@ -575,7 +558,10 @@ export function embedInput<InErr, InElem, InDone>(input: AsyncInputProducer<InEr
575
558
  return <Env, OutErr, OutElem, OutDone>(
576
559
  self: Channel<Env, unknown, unknown, unknown, OutErr, OutElem, OutDone>,
577
560
  ): Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone> => {
578
- return new Bridge(input, self);
561
+ const op = new ChannelPrimitive(ChannelTag.Bridge);
562
+ op.i0 = input;
563
+ op.i1 = self;
564
+ return op as any;
579
565
  };
580
566
  }
581
567
 
@@ -585,7 +571,9 @@ export function embedInput<InErr, InElem, InDone>(input: AsyncInputProducer<InEr
585
571
  * @tsplus static fncts.io.ChannelOps fail
586
572
  */
587
573
  export function fail<E>(error: Lazy<E>): Channel<never, unknown, unknown, unknown, E, never, never> {
588
- return new Fail(() => Cause.fail(error()));
574
+ const op = new ChannelPrimitive(ChannelTag.Halt);
575
+ op.i0 = () => Cause.fail(error());
576
+ return op as any;
589
577
  }
590
578
 
591
579
  /**
@@ -594,7 +582,9 @@ export function fail<E>(error: Lazy<E>): Channel<never, unknown, unknown, unknow
594
582
  * @tsplus static fncts.io.ChannelOps failNow
595
583
  */
596
584
  export function failNow<E>(error: E): Channel<never, unknown, unknown, unknown, E, never, never> {
597
- return new Fail(() => Cause.fail(error));
585
+ const op = new ChannelPrimitive(ChannelTag.Halt);
586
+ op.i0 = () => Cause.fail(error);
587
+ return op as any;
598
588
  }
599
589
 
600
590
  /**
@@ -643,7 +633,7 @@ export function flatten<
643
633
  * @tsplus static fncts.io.ChannelOps fromEither
644
634
  */
645
635
  export function fromEither<E, A>(either: Lazy<Either<E, A>>): Channel<never, unknown, unknown, unknown, E, never, A> {
646
- return Channel.defer(either().match(Channel.failNow, Channel.succeedNow));
636
+ return Channel.defer(either().match({ Left: Channel.failNow, Right: Channel.succeedNow }));
647
637
  }
648
638
 
649
639
  /**
@@ -663,7 +653,11 @@ export function fromInput<Err, Elem, Done>(
663
653
  * @tsplus static fncts.io.ChannelOps fromIO
664
654
  */
665
655
  export function fromIO<R, E, A>(io: Lazy<IO<R, E, A>>): Channel<R, unknown, unknown, unknown, E, never, A> {
666
- return Channel.defer(new FromIO(io()));
656
+ return Channel.defer(() => {
657
+ const op = new ChannelPrimitive(ChannelTag.FromIO) as any;
658
+ op.i0 = io();
659
+ return op;
660
+ });
667
661
  }
668
662
 
669
663
  /**
@@ -680,10 +674,10 @@ export function fromQueue<Err, Elem, Done>(
680
674
  queue: Queue.Dequeue<Either<Exit<Err, Done>, Elem>>,
681
675
  ): Channel<never, unknown, unknown, unknown, Err, Elem, Done> {
682
676
  return Channel.fromIO(queue.take).flatMap((_) =>
683
- _.match(
684
- (_) => _.match(Channel.failCauseNow, Channel.endNow),
685
- (elem) => Channel.writeNow(elem).zipRight(Channel.fromQueue(queue)),
686
- ),
677
+ _.match({
678
+ Left: (_) => _.match(Channel.failCauseNow, Channel.endNow),
679
+ Right: (elem) => Channel.writeNow(elem).zipRight(Channel.fromQueue(queue)),
680
+ }),
687
681
  );
688
682
  }
689
683
 
@@ -697,7 +691,12 @@ export function provideEnvironment<Env>(env: Lazy<Environment<Env>>) {
697
691
  return <InErr, InElem, InDone, OutErr, OutElem, OutDone>(
698
692
  self: Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
699
693
  ): Channel<never, InErr, InElem, InDone, OutErr, OutElem, OutDone> => {
700
- return Channel.defer(new Provide(env(), self));
694
+ return Channel.defer(() => {
695
+ const op = new ChannelPrimitive(ChannelTag.Provide);
696
+ op.i0 = env();
697
+ op.i1 = self;
698
+ return op as any;
699
+ });
701
700
  };
702
701
  }
703
702
 
@@ -718,7 +717,9 @@ export function contramapEnvironment<Env, Env0>(f: (env0: Environment<Env0>) =>
718
717
  * @tsplus static fncts.io.ChannelOps haltNow
719
718
  */
720
719
  export function haltNow(defect: unknown): Channel<never, unknown, unknown, unknown, never, never, never> {
721
- return new Fail(() => Cause.halt(defect));
720
+ const op = new ChannelPrimitive(ChannelTag.Halt);
721
+ op.i0 = () => Cause.halt(defect);
722
+ return op as any;
722
723
  }
723
724
 
724
725
  /**
@@ -727,7 +728,9 @@ export function haltNow(defect: unknown): Channel<never, unknown, unknown, unkno
727
728
  * @tsplus static fncts.io.ChannelOps halt
728
729
  */
729
730
  export function halt(defect: Lazy<unknown>): Channel<never, unknown, unknown, unknown, never, never, never> {
730
- return new Fail(() => Cause.halt(defect()));
731
+ const op = new ChannelPrimitive(ChannelTag.Halt);
732
+ op.i0 = () => Cause.halt(defect());
733
+ return op as any;
731
734
  }
732
735
 
733
736
  /**
@@ -881,30 +884,16 @@ export function matchCauseChannel<
881
884
  OutElem | OutElem1 | OutElem2,
882
885
  OutDone2 | OutDone3
883
886
  > => {
884
- return new Fold<
885
- Env | Env1 | Env2,
886
- InErr & InErr1 & InErr2,
887
- InElem & InElem1 & InElem2,
888
- InDone & InDone1 & InDone2,
889
- OutErr,
890
- OutErr2 | OutErr3,
891
- OutElem | OutElem1 | OutElem2,
892
- OutDone,
893
- OutDone2 | OutDone3
894
- >(
895
- channel,
896
- new ContinuationK<
897
- Env | Env1 | Env2,
898
- InErr & InErr1 & InErr2,
899
- InElem & InElem1 & InElem2,
900
- InDone & InDone1 & InDone2,
901
- OutErr,
902
- OutErr2 | OutErr3,
903
- OutElem | OutElem1 | OutElem2,
904
- OutDone,
905
- OutDone2 | OutDone3
906
- >(onSuccess, onError),
907
- );
887
+ const op = new ChannelPrimitive(ChannelTag.Fold);
888
+ op.i0 = channel;
889
+
890
+ const continuation = new ChannelPrimitive(ChannelTag.ContinuationK);
891
+ continuation.i0 = onSuccess;
892
+ continuation.i1 = onError;
893
+
894
+ op.i1 = continuation;
895
+
896
+ return op as any;
908
897
  };
909
898
  }
910
899
 
@@ -945,7 +934,10 @@ export function matchChannel<
945
934
  OutElem | OutElem1 | OutElem2,
946
935
  OutDone2 | OutDone3
947
936
  > => {
948
- return channel.matchCauseChannel((cause) => cause.failureOrCause.match(onError, Channel.failCauseNow), onSuccess);
937
+ return channel.matchCauseChannel(
938
+ (cause) => cause.failureOrCause.match({ Left: onError, Right: Channel.failCauseNow }),
939
+ onSuccess,
940
+ );
949
941
  };
950
942
  }
951
943
 
@@ -1009,10 +1001,10 @@ export function pipeTo<OutErr, OutElem, OutDone, Env1, OutErr1, OutElem1, OutDon
1009
1001
  return <Env, InErr, InElem, InDone>(
1010
1002
  left: Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1011
1003
  ): Channel<Env | Env1, InErr, InElem, InDone, OutErr1, OutElem1, OutDone1> => {
1012
- return new PipeTo<Env | Env1, InErr, InElem, InDone, OutErr, OutErr1, OutElem, OutElem1, OutDone, OutDone1>(
1013
- () => left,
1014
- () => right,
1015
- );
1004
+ const op = new ChannelPrimitive(ChannelTag.PipeTo);
1005
+ op.i0 = () => left;
1006
+ op.i1 = () => right;
1007
+ return op as any;
1016
1008
  };
1017
1009
  }
1018
1010
 
@@ -1058,13 +1050,16 @@ export function read<In>(): Channel<never, unknown, In, unknown, Nothing, never,
1058
1050
  * @tsplus static fncts.io.ChannelOps readOrFail
1059
1051
  */
1060
1052
  export function readOrFail<In, E>(e: E): Channel<never, unknown, In, unknown, E, never, In> {
1061
- return new Read<never, unknown, In, unknown, never, E, never, never, In>(
1062
- Channel.endNow,
1063
- new ContinuationK(
1064
- () => Channel.failNow(e),
1065
- () => Channel.failNow(e),
1066
- ),
1067
- );
1053
+ const op = new ChannelPrimitive(ChannelTag.Read);
1054
+ op.i0 = Channel.endNow;
1055
+
1056
+ const continuation = new ChannelPrimitive(ChannelTag.ContinuationK);
1057
+ continuation.i0 = () => Channel.failNow(e);
1058
+ continuation.i1 = () => Channel.failNow(e);
1059
+
1060
+ op.i1 = continuation;
1061
+
1062
+ return op as any;
1068
1063
  }
1069
1064
 
1070
1065
  /**
@@ -1101,30 +1096,16 @@ export function readWithCause<
1101
1096
  OutElem | OutElem1 | OutElem2,
1102
1097
  OutDone | OutDone1 | OutDone2
1103
1098
  > {
1104
- return new Read<
1105
- Env | Env1 | Env2,
1106
- InErr,
1107
- InElem,
1108
- InDone,
1109
- InErr,
1110
- OutErr | OutErr1 | OutErr2,
1111
- OutElem | OutElem1 | OutElem2,
1112
- InDone,
1113
- OutDone | OutDone1 | OutDone2
1114
- >(
1115
- inp,
1116
- new ContinuationK<
1117
- Env | Env1 | Env2,
1118
- InErr,
1119
- InElem,
1120
- InDone,
1121
- InErr,
1122
- OutErr | OutErr1 | OutErr2,
1123
- OutElem | OutElem1 | OutElem2,
1124
- InDone,
1125
- OutDone | OutDone1 | OutDone2
1126
- >(done, halt),
1127
- );
1099
+ const op = new ChannelPrimitive(ChannelTag.Read);
1100
+ op.i0 = inp;
1101
+
1102
+ const continuation = new ChannelPrimitive(ChannelTag.ContinuationK);
1103
+ continuation.i0 = done;
1104
+ continuation.i1 = halt;
1105
+
1106
+ op.i1 = continuation;
1107
+
1108
+ return op as any;
1128
1109
  }
1129
1110
 
1130
1111
  /**
@@ -1161,7 +1142,7 @@ export function readWith<
1161
1142
  OutElem | OutElem1 | OutElem2,
1162
1143
  OutDone | OutDone1 | OutDone2
1163
1144
  > {
1164
- return Channel.readWithCause(inp, (c) => c.failureOrCause.match(error, Channel.failCauseNow), done);
1145
+ return Channel.readWithCause(inp, (c) => c.failureOrCause.match({ Left: error, Right: Channel.failCauseNow }), done);
1165
1146
  }
1166
1147
 
1167
1148
  /**
@@ -1201,7 +1182,9 @@ export function toQueue<Err, Done, Elem>(
1201
1182
  * @tsplus static fncts.io.ChannelOps write
1202
1183
  */
1203
1184
  export function write<OutElem>(out: Lazy<OutElem>): Channel<never, unknown, unknown, unknown, never, OutElem, void> {
1204
- return new Emit(out);
1185
+ const op = new ChannelPrimitive(ChannelTag.Emit);
1186
+ op.i0 = out;
1187
+ return op as any;
1205
1188
  }
1206
1189
 
1207
1190
  /**
@@ -1233,7 +1216,9 @@ export function writeChunk<Out>(outs: Conc<Out>): Channel<never, unknown, unknow
1233
1216
  * @tsplus static fncts.io.ChannelOps writeNow
1234
1217
  */
1235
1218
  export function writeNow<OutElem>(out: OutElem): Channel<never, unknown, unknown, unknown, never, OutElem, void> {
1236
- return new Emit(() => out);
1219
+ const op = new ChannelPrimitive(ChannelTag.Emit);
1220
+ op.i0 = () => out;
1221
+ return op as any;
1237
1222
  }
1238
1223
 
1239
1224
  /**
@@ -1,6 +1,6 @@
1
1
  import { tuple } from "@fncts/base/data/function";
2
2
 
3
- import { ContinuationK, Done, Fail, Fold } from "./definition.js";
3
+ import { ChannelPrimitive, ChannelTag, ContinuationK, Done, Fail, Fold } from "./definition.js";
4
4
 
5
5
  /**
6
6
  * Halt a channel with the specified cause
@@ -8,7 +8,9 @@ import { ContinuationK, Done, Fail, Fold } from "./definition.js";
8
8
  * @tsplus static fncts.io.ChannelOps failCause
9
9
  */
10
10
  export function failCause<E>(result: Lazy<Cause<E>>): Channel<never, unknown, unknown, unknown, E, never, never> {
11
- return new Fail(result);
11
+ const op = new ChannelPrimitive(ChannelTag.Halt);
12
+ op.i0 = result;
13
+ return op as any;
12
14
  }
13
15
 
14
16
  /**
@@ -26,7 +28,9 @@ export function failCauseNow<E>(result: Cause<E>): Channel<never, unknown, unkno
26
28
  * @tsplus static fncts.io.ChannelOps end
27
29
  */
28
30
  export function end<OutDone>(result: Lazy<OutDone>): Channel<never, unknown, unknown, unknown, never, never, OutDone> {
29
- return new Done(result);
31
+ const op = new ChannelPrimitive(ChannelTag.Done);
32
+ op.i0 = result;
33
+ return op as any;
30
34
  }
31
35
 
32
36
  /**
@@ -93,17 +97,16 @@ export function flatMap<OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutEle
93
97
  OutElem | OutElem1,
94
98
  OutDone2
95
99
  > => {
96
- return new Fold<
97
- Env | Env1,
98
- InErr & InErr1,
99
- InElem & InElem1,
100
- InDone & InDone1,
101
- OutErr | OutErr1,
102
- OutErr | OutErr1,
103
- OutElem | OutElem1,
104
- OutDone,
105
- OutDone2
106
- >(channel, new ContinuationK(f, Channel.failCauseNow));
100
+ const op = new ChannelPrimitive(ChannelTag.Fold);
101
+
102
+ const continuation = new ChannelPrimitive(ChannelTag.ContinuationK);
103
+ continuation.i0 = f;
104
+ continuation.i1 = Channel.failCauseNow;
105
+
106
+ op.i0 = channel;
107
+ op.i1 = continuation;
108
+
109
+ return op as any;
107
110
  };
108
111
  }
109
112