effect 2.2.0 → 2.2.2

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 (120) 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/channel.js +3 -3
  14. package/dist/cjs/internal/channel.js.map +1 -1
  15. package/dist/cjs/internal/core-effect.js +7 -7
  16. package/dist/cjs/internal/core-effect.js.map +1 -1
  17. package/dist/cjs/internal/core.js +1 -1
  18. package/dist/cjs/internal/core.js.map +1 -1
  19. package/dist/cjs/internal/groupBy.js.map +1 -1
  20. package/dist/cjs/internal/hashMap.js.map +1 -1
  21. package/dist/cjs/internal/hashSet.js.map +1 -1
  22. package/dist/cjs/internal/scopedRef.js +4 -5
  23. package/dist/cjs/internal/scopedRef.js.map +1 -1
  24. package/dist/cjs/internal/stm/stm.js.map +1 -1
  25. package/dist/cjs/internal/stream.js +1 -4
  26. package/dist/cjs/internal/stream.js.map +1 -1
  27. package/dist/cjs/internal/trie.js.map +1 -1
  28. package/dist/cjs/internal/version.js +1 -1
  29. package/dist/dts/Cause.d.ts +6 -4
  30. package/dist/dts/Cause.d.ts.map +1 -1
  31. package/dist/dts/Chunk.d.ts +16 -16
  32. package/dist/dts/Chunk.d.ts.map +1 -1
  33. package/dist/dts/Effect.d.ts +31 -31
  34. package/dist/dts/Effect.d.ts.map +1 -1
  35. package/dist/dts/Either.d.ts +9 -9
  36. package/dist/dts/Either.d.ts.map +1 -1
  37. package/dist/dts/Exit.d.ts +3 -2
  38. package/dist/dts/Exit.d.ts.map +1 -1
  39. package/dist/dts/GroupBy.d.ts +6 -6
  40. package/dist/dts/GroupBy.d.ts.map +1 -1
  41. package/dist/dts/HashMap.d.ts +5 -4
  42. package/dist/dts/HashMap.d.ts.map +1 -1
  43. package/dist/dts/HashSet.d.ts +6 -5
  44. package/dist/dts/HashSet.d.ts.map +1 -1
  45. package/dist/dts/List.d.ts +9 -8
  46. package/dist/dts/List.d.ts.map +1 -1
  47. package/dist/dts/Option.d.ts +7 -7
  48. package/dist/dts/Option.d.ts.map +1 -1
  49. package/dist/dts/ReadonlyArray.d.ts +25 -23
  50. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  51. package/dist/dts/ReadonlyRecord.d.ts +5 -4
  52. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  53. package/dist/dts/STM.d.ts +28 -26
  54. package/dist/dts/STM.d.ts.map +1 -1
  55. package/dist/dts/SortedSet.d.ts +3 -3
  56. package/dist/dts/SortedSet.d.ts.map +1 -1
  57. package/dist/dts/Stream.d.ts +37 -37
  58. package/dist/dts/Stream.d.ts.map +1 -1
  59. package/dist/dts/Trie.d.ts +4 -4
  60. package/dist/dts/Trie.d.ts.map +1 -1
  61. package/dist/dts/internal/hashMap.d.ts.map +1 -1
  62. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  63. package/dist/dts/internal/version.d.ts +1 -1
  64. package/dist/esm/Cause.js.map +1 -1
  65. package/dist/esm/Effect.js.map +1 -1
  66. package/dist/esm/Either.js +1 -1
  67. package/dist/esm/Either.js.map +1 -1
  68. package/dist/esm/Exit.js.map +1 -1
  69. package/dist/esm/HashMap.js.map +1 -1
  70. package/dist/esm/HashSet.js.map +1 -1
  71. package/dist/esm/List.js.map +1 -1
  72. package/dist/esm/ReadonlyArray.js.map +1 -1
  73. package/dist/esm/ReadonlyRecord.js.map +1 -1
  74. package/dist/esm/STM.js.map +1 -1
  75. package/dist/esm/internal/cause.js.map +1 -1
  76. package/dist/esm/internal/channel.js +3 -3
  77. package/dist/esm/internal/channel.js.map +1 -1
  78. package/dist/esm/internal/core-effect.js +7 -7
  79. package/dist/esm/internal/core-effect.js.map +1 -1
  80. package/dist/esm/internal/core.js +1 -1
  81. package/dist/esm/internal/core.js.map +1 -1
  82. package/dist/esm/internal/groupBy.js.map +1 -1
  83. package/dist/esm/internal/hashMap.js.map +1 -1
  84. package/dist/esm/internal/hashSet.js.map +1 -1
  85. package/dist/esm/internal/scopedRef.js +4 -5
  86. package/dist/esm/internal/scopedRef.js.map +1 -1
  87. package/dist/esm/internal/stm/stm.js.map +1 -1
  88. package/dist/esm/internal/stream.js +1 -4
  89. package/dist/esm/internal/stream.js.map +1 -1
  90. package/dist/esm/internal/trie.js.map +1 -1
  91. package/dist/esm/internal/version.js +1 -1
  92. package/package.json +1 -1
  93. package/src/Cause.ts +6 -4
  94. package/src/Chunk.ts +20 -20
  95. package/src/Effect.ts +67 -72
  96. package/src/Either.ts +17 -21
  97. package/src/Exit.ts +3 -2
  98. package/src/GroupBy.ts +6 -6
  99. package/src/HashMap.ts +5 -4
  100. package/src/HashSet.ts +8 -7
  101. package/src/List.ts +11 -10
  102. package/src/Option.ts +8 -8
  103. package/src/ReadonlyArray.ts +44 -38
  104. package/src/ReadonlyRecord.ts +13 -10
  105. package/src/STM.ts +47 -46
  106. package/src/SortedSet.ts +5 -5
  107. package/src/Stream.ts +51 -51
  108. package/src/Trie.ts +4 -4
  109. package/src/internal/cause.ts +16 -7
  110. package/src/internal/channel.ts +21 -17
  111. package/src/internal/core-effect.ts +160 -162
  112. package/src/internal/core.ts +30 -34
  113. package/src/internal/groupBy.ts +2 -1
  114. package/src/internal/hashMap.ts +5 -4
  115. package/src/internal/hashSet.ts +9 -8
  116. package/src/internal/scopedRef.ts +34 -54
  117. package/src/internal/stm/stm.ts +104 -124
  118. package/src/internal/stream.ts +106 -97
  119. package/src/internal/trie.ts +3 -2
  120. package/src/internal/version.ts +1 -1
@@ -5,7 +5,6 @@ import { dual, pipe } from "../Function.js"
5
5
  import { pipeArguments } from "../Pipeable.js"
6
6
  import type * as Scope from "../Scope.js"
7
7
  import type * as ScopedRef from "../ScopedRef.js"
8
- import * as effect from "./core-effect.js"
9
8
  import * as core from "./core.js"
10
9
  import * as circular from "./effect/circular.js"
11
10
  import * as fiberRuntime from "./fiberRuntime.js"
@@ -34,39 +33,30 @@ const close = <A>(self: ScopedRef.ScopedRef<A>): Effect.Effect<never, never, voi
34
33
  export const fromAcquire = <R, E, A>(
35
34
  acquire: Effect.Effect<R, E, A>
36
35
  ): Effect.Effect<R | Scope.Scope, E, ScopedRef.ScopedRef<A>> =>
37
- core.uninterruptibleMask((restore) =>
38
- pipe(
39
- fiberRuntime.scopeMake(),
40
- core.flatMap((newScope) =>
41
- pipe(
42
- restore(
43
- pipe(
44
- acquire,
45
- core.mapInputContext<R, Scope.Scope | R>(Context.add(fiberRuntime.scopeTag, newScope))
46
- )
47
- ),
48
- core.onError((cause) => newScope.close(core.exitFail(cause))),
49
- core.flatMap((value) =>
50
- pipe(
51
- circular.makeSynchronized([newScope, value] as const),
52
- core.flatMap((ref) => {
53
- const scopedRef: ScopedRef.ScopedRef<A> = {
54
- [ScopedRefTypeId]: scopedRefVariance,
55
- pipe() {
56
- return pipeArguments(this, arguments)
57
- },
58
- ref
59
- }
60
- return pipe(
61
- fiberRuntime.addFinalizer<R | Scope.Scope, void>(() => close(scopedRef)),
62
- core.as(scopedRef)
63
- )
64
- })
65
- )
36
+ core.uninterruptible(
37
+ fiberRuntime.scopeMake().pipe(core.flatMap((newScope) =>
38
+ acquire.pipe(
39
+ core.mapInputContext<R, Scope.Scope | R>(Context.add(fiberRuntime.scopeTag, newScope)),
40
+ core.onError((cause) => newScope.close(core.exitFail(cause))),
41
+ core.flatMap((value) =>
42
+ circular.makeSynchronized([newScope, value] as const).pipe(
43
+ core.flatMap((ref) => {
44
+ const scopedRef: ScopedRef.ScopedRef<A> = {
45
+ [ScopedRefTypeId]: scopedRefVariance,
46
+ pipe() {
47
+ return pipeArguments(this, arguments)
48
+ },
49
+ ref
50
+ }
51
+ return pipe(
52
+ fiberRuntime.addFinalizer<R | Scope.Scope, void>(() => close(scopedRef)),
53
+ core.as(scopedRef)
54
+ )
55
+ })
66
56
  )
67
57
  )
68
58
  )
69
- )
59
+ ))
70
60
  )
71
61
 
72
62
  /** @internal */
@@ -92,38 +82,28 @@ export const set = dual<
92
82
  ) =>
93
83
  core.flatten(
94
84
  synchronized.modifyEffect(self.ref, ([oldScope, value]) =>
95
- core.uninterruptibleMask((restore) =>
96
- pipe(
97
- fiberRuntime.scopeMake(),
85
+ core.uninterruptible(
86
+ core.scopeClose(oldScope, core.exitUnit).pipe(
87
+ core.zipRight(fiberRuntime.scopeMake()),
98
88
  core.flatMap((newScope) =>
99
- pipe(
100
- restore(
101
- pipe(
102
- acquire,
103
- core.mapInputContext<Exclude<R, Scope.Scope>, R>(
104
- Context.add(fiberRuntime.scopeTag, newScope) as any
105
- )
106
- )
107
- ),
108
- core.exit,
109
- core.flatMap(
110
- core.exitMatch({
89
+ core.exit(fiberRuntime.scopeExtend(acquire, newScope)).pipe(
90
+ core.flatMap((exit) =>
91
+ core.exitMatch(exit, {
111
92
  onFailure: (cause) =>
112
- pipe(
113
- newScope.close(core.exitUnit),
114
- effect.ignore,
93
+ core.scopeClose(newScope, core.exitUnit).pipe(
115
94
  core.as(
116
95
  [
117
- core.failCause(cause) as unknown as Effect.Effect<never, never, void>,
96
+ core.failCause(cause) as Effect.Effect<never, E, void>,
118
97
  [oldScope, value] as const
119
98
  ] as const
120
99
  )
121
100
  ),
122
101
  onSuccess: (value) =>
123
- pipe(
124
- oldScope.close(core.exitUnit),
125
- effect.ignore,
126
- core.as([core.unit, [newScope, value] as const] as const)
102
+ core.succeed(
103
+ [
104
+ core.unit as Effect.Effect<never, E, void>,
105
+ [newScope, value] as const
106
+ ] as const
127
107
  )
128
108
  })
129
109
  )
@@ -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_: {