effect 2.2.0 → 2.2.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 (110) hide show
  1. package/dist/cjs/Cause.js.map +1 -1
  2. package/dist/cjs/Effect.js.map +1 -1
  3. package/dist/cjs/Either.js +1 -1
  4. package/dist/cjs/Either.js.map +1 -1
  5. package/dist/cjs/Exit.js.map +1 -1
  6. package/dist/cjs/HashMap.js.map +1 -1
  7. package/dist/cjs/HashSet.js.map +1 -1
  8. package/dist/cjs/List.js.map +1 -1
  9. package/dist/cjs/ReadonlyArray.js.map +1 -1
  10. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  11. package/dist/cjs/STM.js.map +1 -1
  12. package/dist/cjs/internal/cause.js.map +1 -1
  13. package/dist/cjs/internal/core-effect.js +7 -7
  14. package/dist/cjs/internal/core-effect.js.map +1 -1
  15. package/dist/cjs/internal/core.js +1 -1
  16. package/dist/cjs/internal/core.js.map +1 -1
  17. package/dist/cjs/internal/groupBy.js.map +1 -1
  18. package/dist/cjs/internal/hashMap.js.map +1 -1
  19. package/dist/cjs/internal/hashSet.js.map +1 -1
  20. package/dist/cjs/internal/stm/stm.js.map +1 -1
  21. package/dist/cjs/internal/stream.js +1 -4
  22. package/dist/cjs/internal/stream.js.map +1 -1
  23. package/dist/cjs/internal/trie.js.map +1 -1
  24. package/dist/cjs/internal/version.js +1 -1
  25. package/dist/dts/Cause.d.ts +6 -4
  26. package/dist/dts/Cause.d.ts.map +1 -1
  27. package/dist/dts/Chunk.d.ts +16 -16
  28. package/dist/dts/Chunk.d.ts.map +1 -1
  29. package/dist/dts/Effect.d.ts +31 -31
  30. package/dist/dts/Effect.d.ts.map +1 -1
  31. package/dist/dts/Either.d.ts +9 -9
  32. package/dist/dts/Either.d.ts.map +1 -1
  33. package/dist/dts/Exit.d.ts +3 -2
  34. package/dist/dts/Exit.d.ts.map +1 -1
  35. package/dist/dts/GroupBy.d.ts +6 -6
  36. package/dist/dts/GroupBy.d.ts.map +1 -1
  37. package/dist/dts/HashMap.d.ts +5 -4
  38. package/dist/dts/HashMap.d.ts.map +1 -1
  39. package/dist/dts/HashSet.d.ts +6 -5
  40. package/dist/dts/HashSet.d.ts.map +1 -1
  41. package/dist/dts/List.d.ts +9 -8
  42. package/dist/dts/List.d.ts.map +1 -1
  43. package/dist/dts/Option.d.ts +7 -7
  44. package/dist/dts/Option.d.ts.map +1 -1
  45. package/dist/dts/ReadonlyArray.d.ts +25 -23
  46. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  47. package/dist/dts/ReadonlyRecord.d.ts +5 -4
  48. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  49. package/dist/dts/STM.d.ts +28 -26
  50. package/dist/dts/STM.d.ts.map +1 -1
  51. package/dist/dts/SortedSet.d.ts +3 -3
  52. package/dist/dts/SortedSet.d.ts.map +1 -1
  53. package/dist/dts/Stream.d.ts +37 -37
  54. package/dist/dts/Stream.d.ts.map +1 -1
  55. package/dist/dts/Trie.d.ts +4 -4
  56. package/dist/dts/Trie.d.ts.map +1 -1
  57. package/dist/dts/internal/hashMap.d.ts.map +1 -1
  58. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  59. package/dist/dts/internal/version.d.ts +1 -1
  60. package/dist/esm/Cause.js.map +1 -1
  61. package/dist/esm/Effect.js.map +1 -1
  62. package/dist/esm/Either.js +1 -1
  63. package/dist/esm/Either.js.map +1 -1
  64. package/dist/esm/Exit.js.map +1 -1
  65. package/dist/esm/HashMap.js.map +1 -1
  66. package/dist/esm/HashSet.js.map +1 -1
  67. package/dist/esm/List.js.map +1 -1
  68. package/dist/esm/ReadonlyArray.js.map +1 -1
  69. package/dist/esm/ReadonlyRecord.js.map +1 -1
  70. package/dist/esm/STM.js.map +1 -1
  71. package/dist/esm/internal/cause.js.map +1 -1
  72. package/dist/esm/internal/core-effect.js +7 -7
  73. package/dist/esm/internal/core-effect.js.map +1 -1
  74. package/dist/esm/internal/core.js +1 -1
  75. package/dist/esm/internal/core.js.map +1 -1
  76. package/dist/esm/internal/groupBy.js.map +1 -1
  77. package/dist/esm/internal/hashMap.js.map +1 -1
  78. package/dist/esm/internal/hashSet.js.map +1 -1
  79. package/dist/esm/internal/stm/stm.js.map +1 -1
  80. package/dist/esm/internal/stream.js +1 -4
  81. package/dist/esm/internal/stream.js.map +1 -1
  82. package/dist/esm/internal/trie.js.map +1 -1
  83. package/dist/esm/internal/version.js +1 -1
  84. package/package.json +1 -1
  85. package/src/Cause.ts +6 -4
  86. package/src/Chunk.ts +20 -20
  87. package/src/Effect.ts +67 -72
  88. package/src/Either.ts +17 -21
  89. package/src/Exit.ts +3 -2
  90. package/src/GroupBy.ts +6 -6
  91. package/src/HashMap.ts +5 -4
  92. package/src/HashSet.ts +8 -7
  93. package/src/List.ts +11 -10
  94. package/src/Option.ts +8 -8
  95. package/src/ReadonlyArray.ts +44 -38
  96. package/src/ReadonlyRecord.ts +13 -10
  97. package/src/STM.ts +47 -46
  98. package/src/SortedSet.ts +5 -5
  99. package/src/Stream.ts +51 -51
  100. package/src/Trie.ts +4 -4
  101. package/src/internal/cause.ts +16 -7
  102. package/src/internal/core-effect.ts +160 -162
  103. package/src/internal/core.ts +30 -34
  104. package/src/internal/groupBy.ts +2 -1
  105. package/src/internal/hashMap.ts +5 -4
  106. package/src/internal/hashSet.ts +9 -8
  107. package/src/internal/stm/stm.ts +104 -124
  108. package/src/internal/stream.ts +106 -97
  109. package/src/internal/trie.ts +3 -2
  110. package/src/internal/version.ts +1 -1
@@ -12,6 +12,7 @@ import * as predicate from "../../Predicate.js"
12
12
  import type { Predicate, Refinement } from "../../Predicate.js"
13
13
  import * as RA from "../../ReadonlyArray.js"
14
14
  import type * as STM from "../../STM.js"
15
+ import type { NoInfer } from "../../Types.js"
15
16
  import * as effectCore from "../core.js"
16
17
  import * as SingleShotGen from "../singleShotGen.js"
17
18
  import * as core from "./core.js"
@@ -337,7 +338,7 @@ export const eventually = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, E, A> =>
337
338
 
338
339
  /** @internal */
339
340
  export const every = dual<
340
- <A, R, E>(predicate: (a: A) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, boolean>,
341
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, boolean>,
341
342
  <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, boolean>
342
343
  >(
343
344
  2,
@@ -364,7 +365,7 @@ export const every = dual<
364
365
 
365
366
  /** @internal */
366
367
  export const exists = dual<
367
- <A, R, E>(predicate: (a: A) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, boolean>,
368
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, boolean>,
368
369
  <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, boolean>
369
370
  >(
370
371
  2,
@@ -391,7 +392,7 @@ export const fiberId: STM.STM<never, never, FiberId.FiberId> = core.effect<never
391
392
 
392
393
  /** @internal */
393
394
  export const filter = dual<
394
- <A, R, E>(predicate: (a: A) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, Array<A>>,
395
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, Array<A>>,
395
396
  <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, Array<A>>
396
397
  >(
397
398
  2,
@@ -414,7 +415,7 @@ export const filter = dual<
414
415
 
415
416
  /** @internal */
416
417
  export const filterNot = dual<
417
- <A, R, E>(predicate: (a: A) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, Array<A>>,
418
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, Array<A>>,
418
419
  <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, Array<A>>
419
420
  >(
420
421
  2,
@@ -423,117 +424,97 @@ export const filterNot = dual<
423
424
  )
424
425
 
425
426
  /** @internal */
426
- export const filterOrDie = dual<
427
- {
428
- <A, B extends A>(
429
- refinement: Refinement<A, B>,
430
- defect: LazyArg<unknown>
431
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
432
- <A, X extends A>(
433
- predicate: Predicate<X>,
434
- defect: LazyArg<unknown>
435
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
436
- },
437
- {
438
- <R, E, A, B extends A>(
439
- self: STM.STM<R, E, A>,
440
- refinement: Refinement<A, B>,
441
- defect: LazyArg<unknown>
442
- ): STM.STM<R, E, B>
443
- <R, E, A, X extends A>(self: STM.STM<R, E, A>, predicate: Predicate<X>, defect: LazyArg<unknown>): STM.STM<R, E, A>
444
- }
445
- >(
427
+ export const filterOrDie: {
428
+ <A, B extends A>(
429
+ refinement: Refinement<NoInfer<A>, B>,
430
+ defect: LazyArg<unknown>
431
+ ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
432
+ <A>(
433
+ predicate: Predicate<NoInfer<A>>,
434
+ defect: LazyArg<unknown>
435
+ ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
436
+ <R, E, A, B extends A>(
437
+ self: STM.STM<R, E, A>,
438
+ refinement: Refinement<A, B>,
439
+ defect: LazyArg<unknown>
440
+ ): STM.STM<R, E, B>
441
+ <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, defect: LazyArg<unknown>): STM.STM<R, E, A>
442
+ } = dual(
446
443
  3,
447
- <R, E, A, X extends A>(self: STM.STM<R, E, A>, predicate: Predicate<X>, defect: LazyArg<unknown>): STM.STM<R, E, A> =>
444
+ <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, defect: LazyArg<unknown>): STM.STM<R, E, A> =>
448
445
  filterOrElse(self, predicate, () => core.dieSync(defect))
449
446
  )
450
447
 
451
448
  /** @internal */
452
- export const filterOrDieMessage = dual<
453
- {
454
- <A, B extends A>(refinement: Refinement<A, B>, message: string): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
455
- <A, X extends A>(predicate: Predicate<X>, message: string): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
456
- },
457
- {
458
- <R, E, A, B extends A>(self: STM.STM<R, E, A>, refinement: Refinement<A, B>, message: string): STM.STM<R, E, B>
459
- <R, E, A, X extends A>(self: STM.STM<R, E, A>, predicate: Predicate<X>, message: string): STM.STM<R, E, A>
460
- }
461
- >(
449
+ export const filterOrDieMessage: {
450
+ <A, B extends A>(
451
+ refinement: Refinement<NoInfer<A>, B>,
452
+ message: string
453
+ ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
454
+ <A>(predicate: Predicate<NoInfer<A>>, message: string): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
455
+ <R, E, A, B extends A>(self: STM.STM<R, E, A>, refinement: Refinement<A, B>, message: string): STM.STM<R, E, B>
456
+ <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, message: string): STM.STM<R, E, A>
457
+ } = dual(
462
458
  3,
463
- (self, predicate, message) => filterOrElse(self, predicate, () => core.dieMessage(message))
459
+ <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, message: string): STM.STM<R, E, A> =>
460
+ filterOrElse(self, predicate, () => core.dieMessage(message))
464
461
  )
465
462
 
466
463
  /** @internal */
467
- export const filterOrElse = dual<
468
- {
469
- <A, B extends A, X extends A, R2, E2, A2>(
470
- refinement: Refinement<A, B>,
471
- orElse: (a: X) => STM.STM<R2, E2, A2>
472
- ): <R, E>(
473
- self: STM.STM<R, E, A>
474
- ) => STM.STM<R2 | R, E2 | E, B | A2>
475
- <A, X extends A, Y extends A, R2, E2, A2>(
476
- predicate: Predicate<X>,
477
- orElse: (a: Y) => STM.STM<R2, E2, A2>
478
- ): <R, E>(
479
- self: STM.STM<R, E, A>
480
- ) => STM.STM<R2 | R, E2 | E, A | A2>
481
- },
482
- {
483
- <R, E, A, B extends A, X extends A, R2, E2, A2>(
484
- self: STM.STM<R, E, A>,
485
- refinement: Refinement<A, B>,
486
- orElse: (a: X) => STM.STM<R2, E2, A2>
487
- ): STM.STM<R2 | R, E2 | E, B | A2>
488
- <R, E, A, X extends A, Y extends A, R2, E2, A2>(
489
- self: STM.STM<R, E, A>,
490
- predicate: Predicate<X>,
491
- orElse: (a: Y) => STM.STM<R2, E2, A2>
492
- ): STM.STM<R2 | R, E2 | E, A | A2>
493
- }
494
- >(
464
+ export const filterOrElse: {
465
+ <A, B extends A, R2, E2, C>(
466
+ refinement: Refinement<NoInfer<A>, B>,
467
+ orElse: (a: NoInfer<A>) => STM.STM<R2, E2, C>
468
+ ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2 | E, B | C>
469
+ <A, R2, E2, B>(
470
+ predicate: Predicate<NoInfer<A>>,
471
+ orElse: (a: NoInfer<A>) => STM.STM<R2, E2, B>
472
+ ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2 | E, A | B>
473
+ <R, E, A, B extends A, R2, E2, C>(
474
+ self: STM.STM<R, E, A>,
475
+ refinement: Refinement<A, B>,
476
+ orElse: (a: A) => STM.STM<R2, E2, C>
477
+ ): STM.STM<R | R2, E | E2, B | C>
478
+ <R, E, A, R2, E2, B>(
479
+ self: STM.STM<R, E, A>,
480
+ predicate: Predicate<A>,
481
+ orElse: (a: A) => STM.STM<R2, E2, B>
482
+ ): STM.STM<R | R2, E | E2, A | B>
483
+ } = dual(
495
484
  3,
496
- <R, E, A, X extends A, Y extends A, R2, E2, A2>(
485
+ <R, E, A, R2, E2, B>(
497
486
  self: STM.STM<R, E, A>,
498
- predicate: Predicate<X>,
499
- orElse: (a: Y) => STM.STM<R2, E2, A2>
500
- ): STM.STM<R2 | R, E2 | E, A | A2> =>
501
- core.flatMap(self, (a): STM.STM<R | R2, E | E2, A | A2> =>
502
- predicate(a as X) ?
503
- core.succeed(a) :
504
- orElse(a as Y))
487
+ predicate: Predicate<A>,
488
+ orElse: (a: A) => STM.STM<R2, E2, B>
489
+ ): STM.STM<R | R2, E | E2, A | B> =>
490
+ core.flatMap(self, (a): STM.STM<R2, E2, A | B> => predicate(a) ? core.succeed(a) : orElse(a))
505
491
  )
506
492
 
507
493
  /** @internal */
508
- export const filterOrFail = dual<
509
- {
510
- <A, B extends A, X extends A, E2>(
511
- refinement: Refinement<A, B>,
512
- orFailWith: (a: X) => E2
513
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E2 | E, B>
514
- <A, X extends A, Y extends A, E2>(
515
- predicate: Predicate<X>,
516
- orFailWith: (a: Y) => E2
517
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E2 | E, A>
518
- },
519
- {
520
- <R, E, A, B extends A, X extends A, E2>(
521
- self: STM.STM<R, E, A>,
522
- refinement: Refinement<A, B>,
523
- orFailWith: (a: X) => E2
524
- ): STM.STM<R, E2 | E, B>
525
- <R, E, A, X extends A, Y extends A, E2>(
526
- self: STM.STM<R, E, A>,
527
- predicate: Predicate<X>,
528
- orFailWith: (a: Y) => E2
529
- ): STM.STM<R, E2 | E, A>
530
- }
531
- >(3, (self, predicate, orFailWith) =>
532
- filterOrElse(
533
- self,
534
- predicate,
535
- (a) => core.failSync(() => orFailWith(a as any))
536
- ))
494
+ export const filterOrFail: {
495
+ <A, B extends A, E2>(
496
+ refinement: Refinement<NoInfer<A>, B>,
497
+ orFailWith: (a: NoInfer<A>) => E2
498
+ ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E2 | E, B>
499
+ <A, E2>(
500
+ predicate: Predicate<NoInfer<A>>,
501
+ orFailWith: (a: NoInfer<A>) => E2
502
+ ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E2 | E, A>
503
+ <R, E, A, B extends A, E2>(
504
+ self: STM.STM<R, E, A>,
505
+ refinement: Refinement<A, B>,
506
+ orFailWith: (a: A) => E2
507
+ ): STM.STM<R, E | E2, B>
508
+ <R, E, A, E2>(self: STM.STM<R, E, A>, predicate: Predicate<A>, orFailWith: (a: A) => E2): STM.STM<R, E | E2, A>
509
+ } = dual(
510
+ 3,
511
+ <R, E, A, E2>(self: STM.STM<R, E, A>, predicate: Predicate<A>, orFailWith: (a: A) => E2): STM.STM<R, E | E2, A> =>
512
+ filterOrElse(
513
+ self,
514
+ predicate,
515
+ (a) => core.failSync(() => orFailWith(a))
516
+ )
517
+ )
537
518
 
538
519
  /** @internal */
539
520
  export const flatten = <R, E, R2, E2, A>(self: STM.STM<R, E, STM.STM<R2, E2, A>>): STM.STM<R | R2, E | E2, A> =>
@@ -1221,7 +1202,7 @@ export const replicateSTMDiscard = dual<
1221
1202
  /** @internal */
1222
1203
  export const retryUntil = dual<
1223
1204
  {
1224
- <A, B extends A>(refinement: Refinement<A, B>): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
1205
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
1225
1206
  <A>(predicate: Predicate<A>): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
1226
1207
  },
1227
1208
  {
@@ -1328,15 +1309,14 @@ export const summarized = dual<
1328
1309
  export const suspend = <R, E, A>(evaluate: LazyArg<STM.STM<R, E, A>>): STM.STM<R, E, A> => flatten(core.sync(evaluate))
1329
1310
 
1330
1311
  /** @internal */
1331
- export const tap = dual<
1332
- <A, X extends A, R2, E2, _>(
1333
- f: (a: X) => STM.STM<R2, E2, _>
1334
- ) => <R, E>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2 | E, A>,
1335
- <R, E, A, X extends A, R2, E2, _>(
1336
- self: STM.STM<R, E, A>,
1337
- f: (a: X) => STM.STM<R2, E2, _>
1338
- ) => STM.STM<R2 | R, E2 | E, A>
1339
- >(2, (self, f) => core.flatMap(self, (a) => as(f(a as any), a)))
1312
+ export const tap: {
1313
+ <A, R2, E2, _>(f: (a: A) => STM.STM<R2, E2, _>): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2 | E, A>
1314
+ <R, E, A, R2, E2, _>(self: STM.STM<R, E, A>, f: (a: A) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A>
1315
+ } = dual(
1316
+ 2,
1317
+ <R, E, A, R2, E2, _>(self: STM.STM<R, E, A>, f: (a: A) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A> =>
1318
+ core.flatMap(self, (a) => as(f(a), a))
1319
+ )
1340
1320
 
1341
1321
  /** @internal */
1342
1322
  export const tapBoth = dual<
@@ -1362,19 +1342,19 @@ export const tapBoth = dual<
1362
1342
  }))
1363
1343
 
1364
1344
  /** @internal */
1365
- export const tapError = dual<
1366
- <E, X extends E, R2, E2, _>(
1367
- f: (error: X) => STM.STM<R2, E2, _>
1368
- ) => <R, A>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E | E2, A>,
1369
- <R, A, E, X extends E, R2, E2, _>(
1370
- self: STM.STM<R, E, A>,
1371
- f: (error: X) => STM.STM<R2, E2, _>
1372
- ) => STM.STM<R2 | R, E | E2, A>
1373
- >(2, (self, f) =>
1374
- core.matchSTM(self, {
1375
- onFailure: (e) => core.zipRight(f(e as any), core.fail(e)),
1376
- onSuccess: core.succeed
1377
- }))
1345
+ export const tapError: {
1346
+ <E, R2, E2, _>(
1347
+ f: (error: NoInfer<E>) => STM.STM<R2, E2, _>
1348
+ ): <R, A>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E | E2, A>
1349
+ <R, A, E, R2, E2, _>(self: STM.STM<R, E, A>, f: (error: E) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A>
1350
+ } = dual(
1351
+ 2,
1352
+ <R, A, E, R2, E2, _>(self: STM.STM<R, E, A>, f: (error: E) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A> =>
1353
+ core.matchSTM(self, {
1354
+ onFailure: (e) => core.zipRight(f(e), core.fail(e)),
1355
+ onSuccess: core.succeed
1356
+ })
1357
+ )
1378
1358
 
1379
1359
  /** @internal */
1380
1360
  export const try_: {