@fncts/io 0.0.38 → 0.0.39

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) 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/_cjs/Channel/api/mapOutConcurrentIO.cjs +8 -2
  5. package/_cjs/Channel/api/mapOutConcurrentIO.cjs.map +1 -1
  6. package/_cjs/Channel/api/mergeAllWith.cjs +23 -14
  7. package/_cjs/Channel/api/mergeAllWith.cjs.map +1 -1
  8. package/_cjs/Channel/api/mergeWith.cjs +16 -4
  9. package/_cjs/Channel/api/mergeWith.cjs.map +1 -1
  10. package/_cjs/Channel/api.cjs +131 -36
  11. package/_cjs/Channel/api.cjs.map +1 -1
  12. package/_cjs/Channel/core-api.cjs +13 -3
  13. package/_cjs/Channel/core-api.cjs.map +1 -1
  14. package/_cjs/Channel/definition.cjs +18 -143
  15. package/_cjs/Channel/definition.cjs.map +1 -1
  16. package/_cjs/Channel/internal/ChannelExecutor.cjs +51 -49
  17. package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
  18. package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs +8 -2
  19. package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs.map +1 -1
  20. package/_cjs/Console/live.cjs +1 -1
  21. package/_cjs/Console/live.cjs.map +1 -1
  22. package/_cjs/Fiber/FiberRuntime.cjs +23 -18
  23. package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
  24. package/_cjs/FiberRef/definition.cjs +3 -1
  25. package/_cjs/FiberRef/definition.cjs.map +1 -1
  26. package/_cjs/FiberRef/unsafe.cjs +6 -1
  27. package/_cjs/FiberRef/unsafe.cjs.map +1 -1
  28. package/_cjs/Future/api.cjs +12 -12
  29. package/_cjs/Future/api.cjs.map +1 -1
  30. package/_cjs/Future/definition.cjs +10 -3
  31. package/_cjs/Future/definition.cjs.map +1 -1
  32. package/_cjs/IO/api/asyncInterrupt.cjs +7 -4
  33. package/_cjs/IO/api/asyncInterrupt.cjs.map +1 -1
  34. package/_cjs/IO/api.cjs +38 -14
  35. package/_cjs/IO/api.cjs.map +1 -1
  36. package/_cjs/IO/runtime.cjs +6 -3
  37. package/_cjs/IO/runtime.cjs.map +1 -1
  38. package/_cjs/Layer/api.cjs +4 -1
  39. package/_cjs/Layer/api.cjs.map +1 -1
  40. package/_cjs/Push/api.cjs +4 -1
  41. package/_cjs/Push/api.cjs.map +1 -1
  42. package/_cjs/Ref/Derived.cjs +35 -8
  43. package/_cjs/Ref/Derived.cjs.map +1 -1
  44. package/_cjs/Ref/DerivedAll.cjs +35 -8
  45. package/_cjs/Ref/DerivedAll.cjs.map +1 -1
  46. package/_cjs/RuntimeFlags/RuntimeFlags.cjs +3 -4
  47. package/_cjs/RuntimeFlags/RuntimeFlags.cjs.map +1 -1
  48. package/_cjs/STM/api/core-api.cjs +4 -1
  49. package/_cjs/STM/api/core-api.cjs.map +1 -1
  50. package/_cjs/STM/api.cjs +16 -4
  51. package/_cjs/STM/api.cjs.map +1 -1
  52. package/_cjs/Schedule/api.cjs +7 -1
  53. package/_cjs/Schedule/api.cjs.map +1 -1
  54. package/_cjs/ScopedRef/api.cjs +2 -2
  55. package/_cjs/ScopedRef/api.cjs.map +1 -1
  56. package/_cjs/Sink/api.cjs +7 -1
  57. package/_cjs/Sink/api.cjs.map +1 -1
  58. package/_cjs/Stream/api/zipAllWith.cjs +4 -1
  59. package/_cjs/Stream/api/zipAllWith.cjs.map +1 -1
  60. package/_cjs/Stream/api/zipWithChunks.cjs +4 -1
  61. package/_cjs/Stream/api/zipWithChunks.cjs.map +1 -1
  62. package/_cjs/Stream/api.cjs +36 -15
  63. package/_cjs/Stream/api.cjs.map +1 -1
  64. package/_cjs/SupervisorPatch.cjs +38 -15
  65. package/_cjs/SupervisorPatch.cjs.map +1 -1
  66. package/_cjs/TRef/definition.cjs +74 -20
  67. package/_cjs/TRef/definition.cjs.map +1 -1
  68. package/_mjs/Channel/api/mapOutConcurrentIO.mjs +8 -2
  69. package/_mjs/Channel/api/mapOutConcurrentIO.mjs.map +1 -1
  70. package/_mjs/Channel/api/mergeAllWith.mjs +23 -14
  71. package/_mjs/Channel/api/mergeAllWith.mjs.map +1 -1
  72. package/_mjs/Channel/api/mergeWith.mjs +16 -4
  73. package/_mjs/Channel/api/mergeWith.mjs.map +1 -1
  74. package/_mjs/Channel/api.mjs +132 -37
  75. package/_mjs/Channel/api.mjs.map +1 -1
  76. package/_mjs/Channel/core-api.mjs +14 -4
  77. package/_mjs/Channel/core-api.mjs.map +1 -1
  78. package/_mjs/Channel/definition.mjs +14 -135
  79. package/_mjs/Channel/definition.mjs.map +1 -1
  80. package/_mjs/Channel/internal/ChannelExecutor.mjs +52 -50
  81. package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
  82. package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs +8 -2
  83. package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs.map +1 -1
  84. package/_mjs/Console/live.mjs +1 -1
  85. package/_mjs/Console/live.mjs.map +1 -1
  86. package/_mjs/Fiber/FiberRuntime.mjs +23 -18
  87. package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
  88. package/_mjs/FiberRef/definition.mjs +3 -1
  89. package/_mjs/FiberRef/definition.mjs.map +1 -1
  90. package/_mjs/FiberRef/unsafe.mjs +4 -0
  91. package/_mjs/FiberRef/unsafe.mjs.map +1 -1
  92. package/_mjs/Future/api.mjs +12 -12
  93. package/_mjs/Future/api.mjs.map +1 -1
  94. package/_mjs/Future/definition.mjs +7 -2
  95. package/_mjs/Future/definition.mjs.map +1 -1
  96. package/_mjs/IO/api/asyncInterrupt.mjs +7 -4
  97. package/_mjs/IO/api/asyncInterrupt.mjs.map +1 -1
  98. package/_mjs/IO/api.mjs +38 -14
  99. package/_mjs/IO/api.mjs.map +1 -1
  100. package/_mjs/IO/runtime.mjs +6 -3
  101. package/_mjs/IO/runtime.mjs.map +1 -1
  102. package/_mjs/Layer/api.mjs +4 -1
  103. package/_mjs/Layer/api.mjs.map +1 -1
  104. package/_mjs/Push/api.mjs +4 -1
  105. package/_mjs/Push/api.mjs.map +1 -1
  106. package/_mjs/Ref/Derived.mjs +35 -8
  107. package/_mjs/Ref/Derived.mjs.map +1 -1
  108. package/_mjs/Ref/DerivedAll.mjs +35 -8
  109. package/_mjs/Ref/DerivedAll.mjs.map +1 -1
  110. package/_mjs/RuntimeFlags/RuntimeFlags.mjs +3 -4
  111. package/_mjs/RuntimeFlags/RuntimeFlags.mjs.map +1 -1
  112. package/_mjs/STM/api/core-api.mjs +4 -1
  113. package/_mjs/STM/api/core-api.mjs.map +1 -1
  114. package/_mjs/STM/api.mjs +16 -4
  115. package/_mjs/STM/api.mjs.map +1 -1
  116. package/_mjs/Schedule/api.mjs +7 -1
  117. package/_mjs/Schedule/api.mjs.map +1 -1
  118. package/_mjs/ScopedRef/api.mjs +2 -2
  119. package/_mjs/ScopedRef/api.mjs.map +1 -1
  120. package/_mjs/Sink/api.mjs +7 -1
  121. package/_mjs/Sink/api.mjs.map +1 -1
  122. package/_mjs/Stream/api/zipAllWith.mjs +4 -1
  123. package/_mjs/Stream/api/zipAllWith.mjs.map +1 -1
  124. package/_mjs/Stream/api/zipWithChunks.mjs +4 -1
  125. package/_mjs/Stream/api/zipWithChunks.mjs.map +1 -1
  126. package/_mjs/Stream/api.mjs +36 -15
  127. package/_mjs/Stream/api.mjs.map +1 -1
  128. package/_mjs/SupervisorPatch.mjs +38 -15
  129. package/_mjs/SupervisorPatch.mjs.map +1 -1
  130. package/_mjs/TRef/definition.mjs +74 -20
  131. package/_mjs/TRef/definition.mjs.map +1 -1
  132. package/_src/Channel/api/mapOutConcurrentIO.ts +5 -5
  133. package/_src/Channel/api/mergeAllWith.ts +9 -9
  134. package/_src/Channel/api/mergeWith.ts +16 -16
  135. package/_src/Channel/api.ts +128 -143
  136. package/_src/Channel/core-api.ts +17 -14
  137. package/_src/Channel/definition.ts +187 -236
  138. package/_src/Channel/internal/ChannelExecutor.ts +47 -45
  139. package/_src/Channel/internal/SingleProducerAsyncInput.ts +2 -2
  140. package/_src/Console/live.ts +1 -1
  141. package/_src/Fiber/FiberRuntime.ts +6 -3
  142. package/_src/FiberRef/definition.ts +4 -1
  143. package/_src/FiberRef/unsafe.ts +5 -0
  144. package/_src/Future/definition.ts +19 -3
  145. package/_src/IO/api/asyncInterrupt.ts +4 -4
  146. package/_src/IO/api.ts +19 -15
  147. package/_src/IO/runtime.ts +6 -3
  148. package/_src/Layer/api.ts +4 -1
  149. package/_src/Push/api.ts +4 -4
  150. package/_src/Ref/Derived.ts +20 -18
  151. package/_src/Ref/DerivedAll.ts +21 -18
  152. package/_src/RuntimeFlags/RuntimeFlags.ts +1 -1
  153. package/_src/STM/api/core-api.ts +1 -1
  154. package/_src/STM/api.ts +4 -4
  155. package/_src/Schedule/api.ts +8 -8
  156. package/_src/ScopedRef/api.ts +4 -3
  157. package/_src/Sink/api.ts +8 -8
  158. package/_src/Stream/api/zipAllWith.ts +4 -4
  159. package/_src/Stream/api/zipWithChunks.ts +4 -4
  160. package/_src/Stream/api.ts +21 -19
  161. package/_src/SupervisorPatch.ts +1 -0
  162. package/_src/TRef/definition.ts +36 -33
  163. 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