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
@@ -26,6 +26,7 @@ import * as ReadonlyArray from "../ReadonlyArray.js"
26
26
  import * as Ref from "../Ref.js"
27
27
  import type * as runtimeFlagsPatch from "../RuntimeFlagsPatch.js"
28
28
  import * as Tracer from "../Tracer.js"
29
+ import type { NoInfer } from "../Types.js"
29
30
  import * as internalCause from "./cause.js"
30
31
  import * as core from "./core.js"
31
32
  import * as defaultServices from "./defaultServices.js"
@@ -255,7 +256,12 @@ export const catchTag = dual<
255
256
  k: K,
256
257
  f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
257
258
  ) => Effect.Effect<R | R1, Exclude<E, { _tag: K }> | E1, A | A1>
258
- >(3, (self, k, f) => core.catchIf(self, Predicate.isTagged(k), f) as any)
259
+ >(3, <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
260
+ self: Effect.Effect<R, E, A>,
261
+ k: K,
262
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
263
+ ): Effect.Effect<R | R1, Exclude<E, { _tag: K }> | E1, A | A1> =>
264
+ core.catchIf(self, Predicate.isTagged(k) as Predicate.Refinement<E, Extract<E, { _tag: K }>>, f) as any)
259
265
 
260
266
  /** @internal */
261
267
  export const catchTags: {
@@ -453,50 +459,56 @@ export const bindValue = dual<
453
459
  ))
454
460
 
455
461
  /* @internal */
456
- export const dropUntil = dual<
462
+ export const dropUntil: {
463
+ <A, R, E>(
464
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
465
+ ): (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>
457
466
  <A, R, E>(
467
+ elements: Iterable<A>,
458
468
  predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
459
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
469
+ ): Effect.Effect<R, E, Array<A>>
470
+ } = dual(
471
+ 2,
460
472
  <A, R, E>(
461
473
  elements: Iterable<A>,
462
474
  predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
463
- ) => Effect.Effect<R, E, Array<A>>
464
- >(2, <A, R, E>(
465
- elements: Iterable<A>,
466
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
467
- ) =>
468
- core.suspend(() => {
469
- const iterator = elements[Symbol.iterator]()
470
- const builder: Array<A> = []
471
- let next: IteratorResult<A, any>
472
- let dropping: Effect.Effect<R, E, boolean> = core.succeed(false)
473
- let i = 0
474
- while ((next = iterator.next()) && !next.done) {
475
- const a = next.value
476
- const index = i++
477
- dropping = core.flatMap(dropping, (bool) => {
478
- if (bool) {
479
- builder.push(a)
480
- return core.succeed(true)
481
- }
482
- return predicate(a, index)
483
- })
484
- }
485
- return core.map(dropping, () => builder)
486
- }))
475
+ ): Effect.Effect<R, E, Array<A>> =>
476
+ core.suspend(() => {
477
+ const iterator = elements[Symbol.iterator]()
478
+ const builder: Array<A> = []
479
+ let next: IteratorResult<A, any>
480
+ let dropping: Effect.Effect<R, E, boolean> = core.succeed(false)
481
+ let i = 0
482
+ while ((next = iterator.next()) && !next.done) {
483
+ const a = next.value
484
+ const index = i++
485
+ dropping = core.flatMap(dropping, (bool) => {
486
+ if (bool) {
487
+ builder.push(a)
488
+ return core.succeed(true)
489
+ }
490
+ return predicate(a, index)
491
+ })
492
+ }
493
+ return core.map(dropping, () => builder)
494
+ })
495
+ )
487
496
 
488
497
  /* @internal */
489
- export const dropWhile = dual<
490
- <R, E, A>(
491
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
492
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
493
- <R, E, A>(
498
+ export const dropWhile: {
499
+ <A, R, E>(
500
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
501
+ ): (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>
502
+ <A, R, E>(
494
503
  elements: Iterable<A>,
495
504
  predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
496
- ) => Effect.Effect<R, E, Array<A>>
497
- >(
505
+ ): Effect.Effect<R, E, Array<A>>
506
+ } = dual(
498
507
  2,
499
- <R, E, A>(elements: Iterable<A>, predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>) =>
508
+ <A, R, E>(
509
+ elements: Iterable<A>,
510
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
511
+ ): Effect.Effect<R, E, Array<A>> =>
500
512
  core.suspend(() => {
501
513
  const iterator = elements[Symbol.iterator]()
502
514
  const builder: Array<A> = []
@@ -542,128 +554,111 @@ export const filterMap = dual<
542
554
  ))
543
555
 
544
556
  /* @internal */
545
- export const filterOrDie = dual<
546
- {
547
- <A, B extends A, X extends A>(
548
- filter: Predicate.Refinement<A, B>,
549
- orDieWith: (a: X) => unknown
550
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
551
- <A, X extends A, Y extends A>(
552
- filter: Predicate.Predicate<X>,
553
- orDieWith: (a: Y) => unknown
554
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
555
- },
556
- {
557
- <R, E, A, B extends A, X extends A>(
558
- self: Effect.Effect<R, E, A>,
559
- filter: Predicate.Refinement<A, B>,
560
- orDieWith: (a: X) => unknown
561
- ): Effect.Effect<R, E, B>
562
- <R, E, A, X extends A, Y extends A>(
563
- self: Effect.Effect<R, E, A>,
564
- filter: Predicate.Predicate<X>,
565
- orDieWith: (a: Y) => unknown
566
- ): Effect.Effect<R, E, A>
567
- }
568
- >(3, <R, E, A, X extends A, Y extends A>(
569
- self: Effect.Effect<R, E, A>,
570
- filter: Predicate.Predicate<X>,
571
- orDieWith: (a: Y) => unknown
572
- ): Effect.Effect<R, E, A> => filterOrElse(self, filter, (a) => core.dieSync(() => orDieWith(a as Y))))
557
+ export const filterOrDie: {
558
+ <A, B extends A>(
559
+ refinement: Predicate.Refinement<NoInfer<A>, B>,
560
+ orDieWith: (a: A) => unknown
561
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
562
+ <A>(
563
+ predicate: Predicate.Predicate<NoInfer<A>>,
564
+ orDieWith: (a: A) => unknown
565
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
566
+ <R, E, A, B extends A>(
567
+ self: Effect.Effect<R, E, A>,
568
+ refinement: Predicate.Refinement<A, B>,
569
+ orDieWith: (a: A) => unknown
570
+ ): Effect.Effect<R, E, B>
571
+ <R, E, A>(
572
+ self: Effect.Effect<R, E, A>,
573
+ filter: Predicate.Predicate<A>,
574
+ orDieWith: (a: A) => unknown
575
+ ): Effect.Effect<R, E, A>
576
+ } = dual(
577
+ 3,
578
+ <R, E, A>(
579
+ self: Effect.Effect<R, E, A>,
580
+ predicate: Predicate.Predicate<A>,
581
+ orDieWith: (a: A) => unknown
582
+ ): Effect.Effect<R, E, A> => filterOrElse(self, predicate, (a) => core.dieSync(() => orDieWith(a)))
583
+ )
573
584
 
574
585
  /* @internal */
575
- export const filterOrDieMessage = dual<
576
- {
577
- <A, B extends A>(
578
- filter: Predicate.Refinement<A, B>,
579
- message: string
580
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
581
- <A, X extends A>(
582
- filter: Predicate.Predicate<X>,
583
- message: string
584
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
585
- },
586
- {
587
- <R, E, A, B extends A>(
588
- self: Effect.Effect<R, E, A>,
589
- filter: Predicate.Refinement<A, B>,
590
- message: string
591
- ): Effect.Effect<R, E, B>
592
- <R, E, A, X extends A>(
593
- self: Effect.Effect<R, E, A>,
594
- filter: Predicate.Predicate<X>,
595
- message: string
596
- ): Effect.Effect<R, E, A>
597
- }
598
- >(3, <R, E, A, X extends A>(
599
- self: Effect.Effect<R, E, A>,
600
- filter: Predicate.Predicate<X>,
601
- message: string
602
- ): Effect.Effect<R, E, A> => filterOrElse(self, filter, () => core.dieMessage(message)))
586
+ export const filterOrDieMessage: {
587
+ <A, B extends A>(
588
+ refinement: Predicate.Refinement<NoInfer<A>, B>,
589
+ message: string
590
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
591
+ <A>(
592
+ predicate: Predicate.Predicate<NoInfer<A>>,
593
+ message: string
594
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
595
+ <R, E, A, B extends A>(
596
+ self: Effect.Effect<R, E, A>,
597
+ refinement: Predicate.Refinement<A, B>,
598
+ message: string
599
+ ): Effect.Effect<R, E, B>
600
+ <R, E, A>(self: Effect.Effect<R, E, A>, predicate: Predicate.Predicate<A>, message: string): Effect.Effect<R, E, A>
601
+ } = dual(
602
+ 3,
603
+ <R, E, A>(self: Effect.Effect<R, E, A>, predicate: Predicate.Predicate<A>, message: string): Effect.Effect<R, E, A> =>
604
+ filterOrElse(self, predicate, () => core.dieMessage(message))
605
+ )
603
606
 
604
607
  /* @internal */
605
- export const filterOrElse = dual<
606
- {
607
- <A, B extends A, X extends A, R2, E2, C>(
608
- filter: Predicate.Refinement<A, B>,
609
- orElse: (a: X) => Effect.Effect<R2, E2, C>
610
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, B | C>
611
- <A, X extends A, Y extends A, R2, E2, B>(
612
- filter: Predicate.Predicate<X>,
613
- orElse: (a: Y) => Effect.Effect<R2, E2, B>
614
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | B>
615
- },
616
- {
617
- <R, E, A, B extends A, X extends A, R2, E2, C>(
618
- self: Effect.Effect<R, E, A>,
619
- filter: Predicate.Refinement<A, B>,
620
- orElse: (a: X) => Effect.Effect<R2, E2, C>
621
- ): Effect.Effect<R | R2, E | E2, B | C>
622
- <R, E, A, X extends A, Y extends A, R2, E2, B>(
623
- self: Effect.Effect<R, E, A>,
624
- filter: Predicate.Predicate<X>,
625
- orElse: (a: Y) => Effect.Effect<R2, E2, B>
626
- ): Effect.Effect<R | R2, E | E2, A | B>
627
- }
628
- >(3, <R, E, A, R2, E2, B>(
608
+ export const filterOrElse: {
609
+ <A, B extends A, R2, E2, C>(
610
+ refinement: Predicate.Refinement<NoInfer<A>, B>,
611
+ orElse: (a: NoInfer<A>) => Effect.Effect<R2, E2, C>
612
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2 | E, B | C>
613
+ <A, R2, E2, B>(
614
+ predicate: Predicate.Predicate<NoInfer<A>>,
615
+ orElse: (a: NoInfer<A>) => Effect.Effect<R2, E2, B>
616
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2 | E, A | B>
617
+ <R, E, A, B extends A, R2, E2, C>(
618
+ self: Effect.Effect<R, E, A>,
619
+ refinement: Predicate.Refinement<A, B>,
620
+ orElse: (a: A) => Effect.Effect<R2, E2, C>
621
+ ): Effect.Effect<R | R2, E | E2, B | C>
622
+ <R, E, A, R2, E2, B>(
623
+ self: Effect.Effect<R, E, A>,
624
+ predicate: Predicate.Predicate<A>,
625
+ orElse: (a: A) => Effect.Effect<R2, E2, B>
626
+ ): Effect.Effect<R | R2, E | E2, A | B>
627
+ } = dual(3, <R, E, A, R2, E2, B>(
629
628
  self: Effect.Effect<R, E, A>,
630
- filter: Predicate.Predicate<A>,
629
+ predicate: Predicate.Predicate<A>,
631
630
  orElse: (a: A) => Effect.Effect<R2, E2, B>
632
631
  ): Effect.Effect<R | R2, E | E2, A | B> =>
633
632
  core.flatMap(
634
633
  self,
635
- (a) => filter(a) ? core.succeed<A | B>(a) : orElse(a)
634
+ (a) => predicate(a) ? core.succeed<A | B>(a) : orElse(a)
636
635
  ))
637
636
 
638
637
  /* @internal */
639
- export const filterOrFail = dual<
640
- {
641
- <A, B extends A, X extends A, E2>(
642
- filter: Predicate.Refinement<A, B>,
643
- orFailWith: (a: X) => E2
644
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E2, B>
645
- <A, X extends A, Y extends A, E2>(
646
- filter: Predicate.Predicate<X>,
647
- orFailWith: (a: Y) => E2
648
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E2, A>
649
- },
650
- {
651
- <R, E, A, B extends A, X extends A, E2>(
652
- self: Effect.Effect<R, E, A>,
653
- filter: Predicate.Refinement<A, B>,
654
- orFailWith: (a: X) => E2
655
- ): Effect.Effect<R, E | E2, B>
656
- <R, E, A, X extends A, Y extends A, E2>(
657
- self: Effect.Effect<R, E, A>,
658
- filter: Predicate.Predicate<X>,
659
- orFailWith: (a: Y) => E2
660
- ): Effect.Effect<R, E | E2, A>
661
- }
662
- >(3, <R, E, A, X extends A, Y extends A, E2>(
638
+ export const filterOrFail: {
639
+ <A, B extends A, E2>(
640
+ refinement: Predicate.Refinement<NoInfer<A>, B>,
641
+ orFailWith: (a: NoInfer<A>) => E2
642
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2 | E, B>
643
+ <A, E2>(
644
+ predicate: Predicate.Predicate<NoInfer<A>>,
645
+ orFailWith: (a: NoInfer<A>) => E2
646
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2 | E, A>
647
+ <R, E, A, B extends A, E2>(
648
+ self: Effect.Effect<R, E, A>,
649
+ refinement: Predicate.Refinement<A, B>,
650
+ orFailWith: (a: A) => E2
651
+ ): Effect.Effect<R, E | E2, B>
652
+ <R, E, A, E2>(
653
+ self: Effect.Effect<R, E, A>,
654
+ predicate: Predicate.Predicate<A>,
655
+ orFailWith: (a: A) => E2
656
+ ): Effect.Effect<R, E | E2, A>
657
+ } = dual(3, <R, E, A, E2>(
663
658
  self: Effect.Effect<R, E, A>,
664
- filter: Predicate.Predicate<X>,
665
- orFailWith: (a: Y) => E2
666
- ): Effect.Effect<R, E | E2, A> => filterOrElse(self, filter, (a) => core.failSync(() => orFailWith(a as Y))))
659
+ predicate: Predicate.Predicate<A>,
660
+ orFailWith: (a: A) => E2
661
+ ): Effect.Effect<R, E | E2, A> => filterOrElse(self, predicate, (a) => core.failSync(() => orFailWith(a))))
667
662
 
668
663
  /* @internal */
669
664
  export const findFirst = dual<
@@ -1400,17 +1395,20 @@ export const labelMetrics = dual<
1400
1395
  )
1401
1396
 
1402
1397
  /* @internal */
1403
- export const takeUntil = dual<
1398
+ export const takeUntil: {
1399
+ <A, R, E>(
1400
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
1401
+ ): (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>
1404
1402
  <R, E, A>(
1403
+ elements: Iterable<A>,
1405
1404
  predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1406
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
1405
+ ): Effect.Effect<R, E, Array<A>>
1406
+ } = dual(
1407
+ 2,
1407
1408
  <R, E, A>(
1408
1409
  elements: Iterable<A>,
1409
1410
  predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1410
- ) => Effect.Effect<R, E, Array<A>>
1411
- >(
1412
- 2,
1413
- <R, E, A>(elements: Iterable<A>, predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>) =>
1411
+ ): Effect.Effect<R, E, Array<A>> =>
1414
1412
  core.suspend(() => {
1415
1413
  const iterator = elements[Symbol.iterator]()
1416
1414
  const builder: Array<A> = []
@@ -1435,7 +1433,7 @@ export const takeUntil = dual<
1435
1433
  /* @internal */
1436
1434
  export const takeWhile = dual<
1437
1435
  <R, E, A>(
1438
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1436
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
1439
1437
  ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
1440
1438
  <R, E, A>(
1441
1439
  elements: Iterable<A>,
@@ -1713,11 +1711,11 @@ export const tryMapPromise = dual<
1713
1711
 
1714
1712
  /* @internal */
1715
1713
  export const unless = dual<
1716
- (predicate: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1717
- <R, E, A>(self: Effect.Effect<R, E, A>, predicate: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1718
- >(2, (self, predicate) =>
1714
+ (condition: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1715
+ <R, E, A>(self: Effect.Effect<R, E, A>, condition: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1716
+ >(2, (self, condition) =>
1719
1717
  core.suspend(() =>
1720
- predicate()
1718
+ condition()
1721
1719
  ? succeedNone
1722
1720
  : asSome(self)
1723
1721
  ))
@@ -1725,13 +1723,13 @@ export const unless = dual<
1725
1723
  /* @internal */
1726
1724
  export const unlessEffect = dual<
1727
1725
  <R2, E2>(
1728
- predicate: Effect.Effect<R2, E2, boolean>
1726
+ condition: Effect.Effect<R2, E2, boolean>
1729
1727
  ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, Option.Option<A>>,
1730
1728
  <R, E, A, R2, E2>(
1731
1729
  self: Effect.Effect<R, E, A>,
1732
- predicate: Effect.Effect<R2, E2, boolean>
1730
+ condition: Effect.Effect<R2, E2, boolean>
1733
1731
  ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>
1734
- >(2, (self, predicate) => core.flatMap(predicate, (b) => (b ? succeedNone : asSome(self))))
1732
+ >(2, (self, condition) => core.flatMap(condition, (b) => (b ? succeedNone : asSome(self))))
1735
1733
 
1736
1734
  /* @internal */
1737
1735
  export const unsandbox = <R, E, A>(self: Effect.Effect<R, Cause.Cause<E>, A>) =>
@@ -1771,11 +1769,11 @@ export const updateService = dual<
1771
1769
 
1772
1770
  /* @internal */
1773
1771
  export const when = dual<
1774
- (predicate: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1775
- <R, E, A>(self: Effect.Effect<R, E, A>, predicate: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1776
- >(2, (self, predicate) =>
1772
+ (condition: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1773
+ <R, E, A>(self: Effect.Effect<R, E, A>, condition: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1774
+ >(2, (self, condition) =>
1777
1775
  core.suspend(() =>
1778
- predicate()
1776
+ condition()
1779
1777
  ? core.map(self, Option.some)
1780
1778
  : core.succeed(Option.none())
1781
1779
  ))
@@ -533,39 +533,35 @@ export const unified = <Args extends ReadonlyArray<any>, Ret extends Effect.Effe
533
533
  (...args: Args): Effect.Effect.Unify<Ret> => f(...args)
534
534
 
535
535
  /* @internal */
536
- export const catchIf = dual<
537
- {
538
- <E, EA extends E, EB extends EA, R2, E2, A2>(
539
- refinement: Refinement<EA, EB>,
540
- f: (e: EB) => Effect.Effect<R2, E2, A2>
541
- ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, Exclude<E, EB> | E2, A2 | A>
542
- <E, EX extends E, R2, E2, A2>(
543
- predicate: Predicate<EX>,
544
- f: (e: EX) => Effect.Effect<R2, E2, A2>
545
- ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E | E2, A2 | A>
546
- },
547
- {
548
- <R, E, A, EA extends E, EB extends EA, R2, E2, A2>(
549
- self: Effect.Effect<R, E, A>,
550
- refinement: Refinement<EA, EB>,
551
- f: (e: EB) => Effect.Effect<R2, E2, A2>
552
- ): Effect.Effect<R2 | R, Exclude<E, EB> | E2, A2 | A>
553
- <R, E, A, EX extends E, R2, E2, A2>(
554
- self: Effect.Effect<R, E, A>,
555
- predicate: Predicate<EX>,
556
- f: (e: EX) => Effect.Effect<R2, E2, A2>
557
- ): Effect.Effect<R2 | R, E | E2, A2 | A>
558
- }
559
- >(3, <R, E, A, EX extends E, R2, E2, A2>(
536
+ export const catchIf: {
537
+ <E, EB extends E, R2, E2, A2>(
538
+ refinement: Refinement<NoInfer<E>, EB>,
539
+ f: (e: EB) => Effect.Effect<R2, E2, A2>
540
+ ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2 | Exclude<E, EB>, A2 | A>
541
+ <E, R2, E2, A2>(
542
+ predicate: Predicate<NoInfer<E>>,
543
+ f: (e: NoInfer<E>) => Effect.Effect<R2, E2, A2>
544
+ ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E | E2, A2 | A>
545
+ <R, E, A, EA extends E, EB extends EA, R2, E2, A2>(
546
+ self: Effect.Effect<R, E, A>,
547
+ refinement: Refinement<EA, EB>,
548
+ f: (e: EB) => Effect.Effect<R2, E2, A2>
549
+ ): Effect.Effect<R | R2, E2 | Exclude<E, EB>, A | A2>
550
+ <R, E, A, R2, E2, A2>(
551
+ self: Effect.Effect<R, E, A>,
552
+ predicate: Predicate<E>,
553
+ f: (e: E) => Effect.Effect<R2, E2, A2>
554
+ ): Effect.Effect<R | R2, E | E2, A | A2>
555
+ } = dual(3, <R, E, A, R2, E2, A2>(
560
556
  self: Effect.Effect<R, E, A>,
561
- predicate: Predicate<EX>,
562
- f: (e: EX) => Effect.Effect<R2, E2, A2>
563
- ) =>
557
+ predicate: Predicate<E>,
558
+ f: (e: E) => Effect.Effect<R2, E2, A2>
559
+ ): Effect.Effect<R | R2, E | E2, A | A2> =>
564
560
  catchAllCause(self, (cause): Effect.Effect<R2 | R, E | E2, A2 | A> => {
565
561
  const either = internalCause.failureOrCause(cause)
566
562
  switch (either._tag) {
567
563
  case "Left": {
568
- return predicate(either.left as EX) ? f(either.left as EX) : failCause(cause)
564
+ return predicate(either.left) ? f(either.left) : failCause(cause)
569
565
  }
570
566
  case "Right": {
571
567
  return failCause(either.right)
@@ -1249,16 +1245,16 @@ export const updateRuntimeFlags = (patch: RuntimeFlagsPatch.RuntimeFlagsPatch):
1249
1245
  /* @internal */
1250
1246
  export const whenEffect = dual<
1251
1247
  <R, E>(
1252
- predicate: Effect.Effect<R, E, boolean>
1248
+ condition: Effect.Effect<R, E, boolean>
1253
1249
  ) => <R2, E2, A>(
1254
1250
  effect: Effect.Effect<R2, E2, A>
1255
1251
  ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>,
1256
1252
  <R, E, A, R2, E2>(
1257
1253
  self: Effect.Effect<R2, E2, A>,
1258
- predicate: Effect.Effect<R, E, boolean>
1254
+ condition: Effect.Effect<R, E, boolean>
1259
1255
  ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>
1260
- >(2, (self, predicate) =>
1261
- flatMap(predicate, (b) => {
1256
+ >(2, (self, condition) =>
1257
+ flatMap(condition, (b) => {
1262
1258
  if (b) {
1263
1259
  return pipe(self, map(Option.some))
1264
1260
  }
@@ -2373,8 +2369,8 @@ export const exitDie = (defect: unknown): Exit.Exit<never, never> =>
2373
2369
 
2374
2370
  /** @internal */
2375
2371
  export const exitExists: {
2376
- <A, B extends A>(refinement: Refinement<A, B>): <E>(self: Exit.Exit<E, A>) => self is Exit.Exit<never, B>
2377
- <A>(predicate: Predicate<A>): <E>(self: Exit.Exit<E, A>) => boolean
2372
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): <E>(self: Exit.Exit<E, A>) => self is Exit.Exit<never, B>
2373
+ <A>(predicate: Predicate<NoInfer<A>>): <E>(self: Exit.Exit<E, A>) => boolean
2378
2374
  <E, A, B extends A>(self: Exit.Exit<E, A>, refinement: Refinement<A, B>): self is Exit.Exit<never, B>
2379
2375
  <E, A>(self: Exit.Exit<E, A>, predicate: Predicate<A>): boolean
2380
2376
  } = dual(2, <E, A, B extends A>(self: Exit.Exit<E, A>, refinement: Refinement<A, B>): self is Exit.Exit<never, B> => {
@@ -13,6 +13,7 @@ import * as Queue from "../Queue.js"
13
13
  import * as Ref from "../Ref.js"
14
14
  import type * as Stream from "../Stream.js"
15
15
  import type * as Take from "../Take.js"
16
+ import type { NoInfer } from "../Types.js"
16
17
  import * as channel from "./channel.js"
17
18
  import * as channelExecutor from "./channel/channelExecutor.js"
18
19
  import * as core from "./core-stream.js"
@@ -75,7 +76,7 @@ export const evaluate = dual<
75
76
 
76
77
  /** @internal */
77
78
  export const filter = dual<
78
- <K>(predicate: Predicate<K>) => <R, E, V>(self: GroupBy.GroupBy<R, E, K, V>) => GroupBy.GroupBy<R, E, K, V>,
79
+ <K>(predicate: Predicate<NoInfer<K>>) => <R, E, V>(self: GroupBy.GroupBy<R, E, K, V>) => GroupBy.GroupBy<R, E, K, V>,
79
80
  <R, E, V, K>(self: GroupBy.GroupBy<R, E, K, V>, predicate: Predicate<K>) => GroupBy.GroupBy<R, E, K, V>
80
81
  >(2, <R, E, V, K>(self: GroupBy.GroupBy<R, E, K, V>, predicate: Predicate<K>): GroupBy.GroupBy<R, E, K, V> =>
81
82
  make(
@@ -7,6 +7,7 @@ import { format, NodeInspectSymbol, toJSON } from "../Inspectable.js"
7
7
  import * as Option from "../Option.js"
8
8
  import { pipeArguments } from "../Pipeable.js"
9
9
  import { hasProperty } from "../Predicate.js"
10
+ import type { NoInfer } from "../Types.js"
10
11
  import { fromBitmap, hashFragment, toBitmap } from "./hashMap/bitwise.js"
11
12
  import { SIZE } from "./hashMap/config.js"
12
13
  import * as Node from "./hashMap/node.js"
@@ -486,8 +487,8 @@ export const reduce = Dual.dual<
486
487
 
487
488
  /** @internal */
488
489
  export const filter: {
489
- <K, A, B extends A>(f: (a: A, k: K) => a is B): (self: HM.HashMap<K, A>) => HM.HashMap<K, B>
490
- <K, B extends A, A = B>(f: (a: A, k: K) => boolean): (self: HM.HashMap<K, B>) => HM.HashMap<K, B>
490
+ <K, A, B extends A>(f: (a: NoInfer<A>, k: K) => a is B): (self: HM.HashMap<K, A>) => HM.HashMap<K, B>
491
+ <K, A>(f: (a: NoInfer<A>, k: K) => boolean): (self: HM.HashMap<K, A>) => HM.HashMap<K, A>
491
492
  <K, A, B extends A>(self: HM.HashMap<K, A>, f: (a: A, k: K) => a is B): HM.HashMap<K, B>
492
493
  <K, A>(self: HM.HashMap<K, A>, f: (a: A, k: K) => boolean): HM.HashMap<K, A>
493
494
  } = Dual.dual(
@@ -523,8 +524,8 @@ export const filterMap = Dual.dual<
523
524
 
524
525
  /** @internal */
525
526
  export const findFirst: {
526
- <K, A, B extends A>(predicate: (a: A, k: K) => a is B): (self: HM.HashMap<K, A>) => Option.Option<[K, B]>
527
- <K, B extends A, A = B>(predicate: (a: A, k: K) => boolean): (self: HM.HashMap<K, B>) => Option.Option<[K, B]>
527
+ <K, A, B extends A>(predicate: (a: NoInfer<A>, k: K) => a is B): (self: HM.HashMap<K, A>) => Option.Option<[K, B]>
528
+ <K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HM.HashMap<K, A>) => Option.Option<[K, A]>
528
529
  <K, A, B extends A>(self: HM.HashMap<K, A>, predicate: (a: A, k: K) => a is B): Option.Option<[K, B]>
529
530
  <K, A>(self: HM.HashMap<K, A>, predicate: (a: A, k: K) => boolean): Option.Option<[K, A]>
530
531
  } = Dual.dual(
@@ -7,6 +7,7 @@ import { format, NodeInspectSymbol, toJSON } from "../Inspectable.js"
7
7
  import { pipeArguments } from "../Pipeable.js"
8
8
  import type { Predicate, Refinement } from "../Predicate.js"
9
9
  import { hasProperty } from "../Predicate.js"
10
+ import type { NoInfer } from "../Types.js"
10
11
  import * as HM from "./hashMap.js"
11
12
 
12
13
  const HashSetSymbolKey = "effect/HashSet"
@@ -112,7 +113,7 @@ export const some = dual<
112
113
 
113
114
  /** @internal */
114
115
  export const every: {
115
- <A, B extends A>(refinement: Refinement<A, B>): (self: HS.HashSet<A>) => self is HS.HashSet<B>
116
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: HS.HashSet<A>) => self is HS.HashSet<B>
116
117
  <A>(predicate: Predicate<A>): (self: HS.HashSet<A>) => boolean
117
118
  <A, B extends A>(self: HS.HashSet<A>, refinement: Refinement<A, B>): self is HS.HashSet<B>
118
119
  <A>(self: HS.HashSet<A>, predicate: Predicate<A>): boolean
@@ -272,8 +273,8 @@ export const reduce = dual<
272
273
 
273
274
  /** @internal */
274
275
  export const filter: {
275
- <A, B extends A>(refinement: Refinement<A, B>): (self: HS.HashSet<A>) => HS.HashSet<B>
276
- <B extends A, A = B>(predicate: Predicate<B>): (self: HS.HashSet<A>) => HS.HashSet<A>
276
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: HS.HashSet<A>) => HS.HashSet<B>
277
+ <A>(predicate: Predicate<NoInfer<A>>): (self: HS.HashSet<A>) => HS.HashSet<A>
277
278
  <A, B extends A>(self: HS.HashSet<A>, refinement: Refinement<A, B>): HS.HashSet<B>
278
279
  <A>(self: HS.HashSet<A>, predicate: Predicate<A>): HS.HashSet<A>
279
280
  } = dual(2, <A>(self: HS.HashSet<A>, f: Predicate<A>) => {
@@ -291,12 +292,12 @@ export const filter: {
291
292
 
292
293
  /** @internal */
293
294
  export const partition: {
294
- <C extends A, B extends A, A = C>(
295
- refinement: Refinement<A, B>
296
- ): (self: HS.HashSet<C>) => [excluded: HS.HashSet<Exclude<C, B>>, satisfying: HS.HashSet<B>]
297
295
  <A, B extends A>(
298
- predicate: Predicate<A>
299
- ): (self: HS.HashSet<B>) => [excluded: HS.HashSet<B>, satisfying: HS.HashSet<B>]
296
+ refinement: Refinement<NoInfer<A>, B>
297
+ ): (self: HS.HashSet<A>) => [excluded: HS.HashSet<Exclude<A, B>>, satisfying: HS.HashSet<B>]
298
+ <A>(
299
+ predicate: Predicate<NoInfer<A>>
300
+ ): (self: HS.HashSet<A>) => [excluded: HS.HashSet<A>, satisfying: HS.HashSet<A>]
300
301
  <A, B extends A>(
301
302
  self: HS.HashSet<A>,
302
303
  refinement: Refinement<A, B>