effect 3.12.11 → 3.13.0

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 (204) hide show
  1. package/README.md +38 -49
  2. package/dist/cjs/Channel.js.map +1 -1
  3. package/dist/cjs/DateTime.js +17 -1
  4. package/dist/cjs/DateTime.js.map +1 -1
  5. package/dist/cjs/Differ.js.map +1 -1
  6. package/dist/cjs/Duration.js +128 -1
  7. package/dist/cjs/Duration.js.map +1 -1
  8. package/dist/cjs/Effect.js +175 -37
  9. package/dist/cjs/Effect.js.map +1 -1
  10. package/dist/cjs/Either.js +2 -1
  11. package/dist/cjs/Either.js.map +1 -1
  12. package/dist/cjs/FiberHandle.js +54 -21
  13. package/dist/cjs/FiberHandle.js.map +1 -1
  14. package/dist/cjs/FiberMap.js +51 -24
  15. package/dist/cjs/FiberMap.js.map +1 -1
  16. package/dist/cjs/FiberSet.js +50 -17
  17. package/dist/cjs/FiberSet.js.map +1 -1
  18. package/dist/cjs/HashMap.js +19 -1
  19. package/dist/cjs/HashMap.js.map +1 -1
  20. package/dist/cjs/HashSet.js +9 -1
  21. package/dist/cjs/HashSet.js.map +1 -1
  22. package/dist/cjs/Layer.js +21 -1
  23. package/dist/cjs/Layer.js.map +1 -1
  24. package/dist/cjs/Match.js +659 -38
  25. package/dist/cjs/Match.js.map +1 -1
  26. package/dist/cjs/RcMap.js +11 -1
  27. package/dist/cjs/RcMap.js.map +1 -1
  28. package/dist/cjs/Reloadable.js.map +1 -1
  29. package/dist/cjs/STM.js.map +1 -1
  30. package/dist/cjs/Schedule.js +1074 -309
  31. package/dist/cjs/Schedule.js.map +1 -1
  32. package/dist/cjs/Schema.js +73 -1
  33. package/dist/cjs/Schema.js.map +1 -1
  34. package/dist/cjs/Stream.js.map +1 -1
  35. package/dist/cjs/internal/channel.js.map +1 -1
  36. package/dist/cjs/internal/core-effect.js.map +1 -1
  37. package/dist/cjs/internal/core.js +27 -3
  38. package/dist/cjs/internal/core.js.map +1 -1
  39. package/dist/cjs/internal/dateTime.js +4 -1
  40. package/dist/cjs/internal/dateTime.js.map +1 -1
  41. package/dist/cjs/internal/differ.js +4 -0
  42. package/dist/cjs/internal/differ.js.map +1 -1
  43. package/dist/cjs/internal/effect/circular.js +3 -2
  44. package/dist/cjs/internal/effect/circular.js.map +1 -1
  45. package/dist/cjs/internal/fiberRuntime.js +21 -7
  46. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  47. package/dist/cjs/internal/hashMap.js +10 -1
  48. package/dist/cjs/internal/hashMap.js.map +1 -1
  49. package/dist/cjs/internal/keyedPool.js +1 -1
  50. package/dist/cjs/internal/keyedPool.js.map +1 -1
  51. package/dist/cjs/internal/layer.js.map +1 -1
  52. package/dist/cjs/internal/rcMap.js +86 -56
  53. package/dist/cjs/internal/rcMap.js.map +1 -1
  54. package/dist/cjs/internal/reloadable.js.map +1 -1
  55. package/dist/cjs/internal/schedule.js.map +1 -1
  56. package/dist/cjs/internal/sink.js.map +1 -1
  57. package/dist/cjs/internal/stm/stm.js.map +1 -1
  58. package/dist/cjs/internal/stream.js.map +1 -1
  59. package/dist/cjs/internal/version.js +1 -1
  60. package/dist/cjs/internal/version.js.map +1 -1
  61. package/dist/dts/Channel.d.ts +4 -4
  62. package/dist/dts/Channel.d.ts.map +1 -1
  63. package/dist/dts/DateTime.d.ts +16 -0
  64. package/dist/dts/DateTime.d.ts.map +1 -1
  65. package/dist/dts/Differ.d.ts +2 -1
  66. package/dist/dts/Differ.d.ts.map +1 -1
  67. package/dist/dts/Duration.d.ts +64 -0
  68. package/dist/dts/Duration.d.ts.map +1 -1
  69. package/dist/dts/Effect.d.ts +402 -30
  70. package/dist/dts/Effect.d.ts.map +1 -1
  71. package/dist/dts/Either.d.ts +7 -0
  72. package/dist/dts/Either.d.ts.map +1 -1
  73. package/dist/dts/FiberHandle.d.ts +26 -0
  74. package/dist/dts/FiberHandle.d.ts.map +1 -1
  75. package/dist/dts/FiberMap.d.ts +26 -0
  76. package/dist/dts/FiberMap.d.ts.map +1 -1
  77. package/dist/dts/FiberSet.d.ts +25 -0
  78. package/dist/dts/FiberSet.d.ts.map +1 -1
  79. package/dist/dts/HashMap.d.ts +38 -0
  80. package/dist/dts/HashMap.d.ts.map +1 -1
  81. package/dist/dts/HashSet.d.ts +7 -0
  82. package/dist/dts/HashSet.d.ts.map +1 -1
  83. package/dist/dts/Layer.d.ts +32 -13
  84. package/dist/dts/Layer.d.ts.map +1 -1
  85. package/dist/dts/Match.d.ts +731 -48
  86. package/dist/dts/Match.d.ts.map +1 -1
  87. package/dist/dts/RcMap.d.ts +32 -0
  88. package/dist/dts/RcMap.d.ts.map +1 -1
  89. package/dist/dts/Reloadable.d.ts +13 -13
  90. package/dist/dts/Reloadable.d.ts.map +1 -1
  91. package/dist/dts/STM.d.ts +4 -4
  92. package/dist/dts/STM.d.ts.map +1 -1
  93. package/dist/dts/Schedule.d.ts +2294 -633
  94. package/dist/dts/Schedule.d.ts.map +1 -1
  95. package/dist/dts/Schema.d.ts +40 -4
  96. package/dist/dts/Schema.d.ts.map +1 -1
  97. package/dist/dts/Stream.d.ts +8 -8
  98. package/dist/dts/Stream.d.ts.map +1 -1
  99. package/dist/dts/Trie.d.ts +7 -7
  100. package/dist/dts/Trie.d.ts.map +1 -1
  101. package/dist/dts/index.d.ts +25 -0
  102. package/dist/dts/index.d.ts.map +1 -1
  103. package/dist/dts/internal/stm/stm.d.ts +2 -2
  104. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  105. package/dist/esm/Channel.js.map +1 -1
  106. package/dist/esm/DateTime.js +16 -0
  107. package/dist/esm/DateTime.js.map +1 -1
  108. package/dist/esm/Differ.js.map +1 -1
  109. package/dist/esm/Duration.js +124 -0
  110. package/dist/esm/Duration.js.map +1 -1
  111. package/dist/esm/Effect.js +170 -32
  112. package/dist/esm/Effect.js.map +1 -1
  113. package/dist/esm/Either.js +7 -0
  114. package/dist/esm/Either.js.map +1 -1
  115. package/dist/esm/FiberHandle.js +48 -18
  116. package/dist/esm/FiberHandle.js.map +1 -1
  117. package/dist/esm/FiberMap.js +46 -22
  118. package/dist/esm/FiberMap.js.map +1 -1
  119. package/dist/esm/FiberSet.js +45 -15
  120. package/dist/esm/FiberSet.js.map +1 -1
  121. package/dist/esm/HashMap.js +17 -0
  122. package/dist/esm/HashMap.js.map +1 -1
  123. package/dist/esm/HashSet.js +7 -0
  124. package/dist/esm/HashSet.js.map +1 -1
  125. package/dist/esm/Layer.js +20 -0
  126. package/dist/esm/Layer.js.map +1 -1
  127. package/dist/esm/Match.js +665 -40
  128. package/dist/esm/Match.js.map +1 -1
  129. package/dist/esm/RcMap.js +10 -0
  130. package/dist/esm/RcMap.js.map +1 -1
  131. package/dist/esm/Reloadable.js.map +1 -1
  132. package/dist/esm/STM.js.map +1 -1
  133. package/dist/esm/Schedule.js +1074 -309
  134. package/dist/esm/Schedule.js.map +1 -1
  135. package/dist/esm/Schema.js +71 -0
  136. package/dist/esm/Schema.js.map +1 -1
  137. package/dist/esm/Stream.js.map +1 -1
  138. package/dist/esm/index.js +25 -0
  139. package/dist/esm/index.js.map +1 -1
  140. package/dist/esm/internal/channel.js.map +1 -1
  141. package/dist/esm/internal/core-effect.js.map +1 -1
  142. package/dist/esm/internal/core.js +23 -0
  143. package/dist/esm/internal/core.js.map +1 -1
  144. package/dist/esm/internal/dateTime.js +2 -0
  145. package/dist/esm/internal/dateTime.js.map +1 -1
  146. package/dist/esm/internal/differ.js +4 -0
  147. package/dist/esm/internal/differ.js.map +1 -1
  148. package/dist/esm/internal/effect/circular.js +3 -2
  149. package/dist/esm/internal/effect/circular.js.map +1 -1
  150. package/dist/esm/internal/fiberRuntime.js +18 -5
  151. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  152. package/dist/esm/internal/hashMap.js +9 -0
  153. package/dist/esm/internal/hashMap.js.map +1 -1
  154. package/dist/esm/internal/keyedPool.js +1 -1
  155. package/dist/esm/internal/keyedPool.js.map +1 -1
  156. package/dist/esm/internal/layer.js.map +1 -1
  157. package/dist/esm/internal/rcMap.js +85 -55
  158. package/dist/esm/internal/rcMap.js.map +1 -1
  159. package/dist/esm/internal/reloadable.js.map +1 -1
  160. package/dist/esm/internal/schedule.js.map +1 -1
  161. package/dist/esm/internal/sink.js.map +1 -1
  162. package/dist/esm/internal/stm/stm.js.map +1 -1
  163. package/dist/esm/internal/stream.js.map +1 -1
  164. package/dist/esm/internal/version.js +1 -1
  165. package/dist/esm/internal/version.js.map +1 -1
  166. package/package.json +2 -1
  167. package/src/Channel.ts +14 -17
  168. package/src/DateTime.ts +17 -8
  169. package/src/Differ.ts +2 -1
  170. package/src/Duration.ts +147 -0
  171. package/src/Effect.ts +528 -140
  172. package/src/Either.ts +9 -0
  173. package/src/FiberHandle.ts +95 -35
  174. package/src/FiberMap.ts +104 -39
  175. package/src/FiberSet.ts +93 -24
  176. package/src/HashMap.ts +40 -0
  177. package/src/HashSet.ts +8 -0
  178. package/src/Layer.ts +94 -40
  179. package/src/Match.ts +733 -49
  180. package/src/RcMap.ts +34 -0
  181. package/src/Reloadable.ts +17 -27
  182. package/src/STM.ts +10 -17
  183. package/src/Schedule.ts +2325 -653
  184. package/src/Schema.ts +81 -4
  185. package/src/Stream.ts +26 -33
  186. package/src/Trie.ts +7 -7
  187. package/src/index.ts +25 -0
  188. package/src/internal/channel.ts +37 -39
  189. package/src/internal/core-effect.ts +84 -84
  190. package/src/internal/core.ts +80 -0
  191. package/src/internal/dateTime.ts +3 -0
  192. package/src/internal/differ.ts +4 -0
  193. package/src/internal/effect/circular.ts +3 -2
  194. package/src/internal/fiberRuntime.ts +31 -6
  195. package/src/internal/hashMap.ts +16 -0
  196. package/src/internal/keyedPool.ts +1 -1
  197. package/src/internal/layer.ts +52 -52
  198. package/src/internal/rcMap.ts +131 -89
  199. package/src/internal/reloadable.ts +25 -28
  200. package/src/internal/schedule.ts +29 -23
  201. package/src/internal/sink.ts +16 -15
  202. package/src/internal/stm/stm.ts +54 -46
  203. package/src/internal/stream.ts +100 -100
  204. package/src/internal/version.ts +1 -1
@@ -26,7 +26,7 @@ import type * as Random from "../Random.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
+ import type * as Types from "../Types.js"
30
30
  import type { Unify } from "../Unify.js"
31
31
  import { internalCall } from "../Utils.js"
32
32
  import * as internalCause from "./cause.js"
@@ -175,17 +175,17 @@ export const catchAllDefect = dual<
175
175
  /* @internal */
176
176
  export const catchSomeCause: {
177
177
  <E, A2, E2, R2>(
178
- f: (cause: Cause.Cause<NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
178
+ f: (cause: Cause.Cause<Types.NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
179
179
  ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E | E2, R2 | R>
180
180
  <A, E, R, A2, E2, R2>(
181
181
  self: Effect.Effect<A, E, R>,
182
- f: (cause: Cause.Cause<NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
182
+ f: (cause: Cause.Cause<Types.NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
183
183
  ): Effect.Effect<A2 | A, E | E2, R2 | R>
184
184
  } = dual(
185
185
  2,
186
186
  <A, E, R, A2, E2, R2>(
187
187
  self: Effect.Effect<A, E, R>,
188
- f: (cause: Cause.Cause<NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
188
+ f: (cause: Cause.Cause<Types.NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
189
189
  ): Effect.Effect<A2 | A, E | E2, R2 | R> =>
190
190
  core.matchCauseEffect(self, {
191
191
  onFailure: (cause): Effect.Effect<A2, E | E2, R2> => {
@@ -376,14 +376,14 @@ export const Do: Effect.Effect<{}> = core.succeed({})
376
376
  export const bind: {
377
377
  <N extends string, A extends object, B, E2, R2>(
378
378
  name: Exclude<N, keyof A>,
379
- f: (a: NoInfer<A>) => Effect.Effect<B, E2, R2>
379
+ f: (a: Types.NoInfer<A>) => Effect.Effect<B, E2, R2>
380
380
  ): <E1, R1>(
381
381
  self: Effect.Effect<A, E1, R1>
382
382
  ) => Effect.Effect<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }, E2 | E1, R2 | R1>
383
383
  <A extends object, N extends string, E1, R1, B, E2, R2>(
384
384
  self: Effect.Effect<A, E1, R1>,
385
385
  name: Exclude<N, keyof A>,
386
- f: (a: NoInfer<A>) => Effect.Effect<B, E2, R2>
386
+ f: (a: Types.NoInfer<A>) => Effect.Effect<B, E2, R2>
387
387
  ): Effect.Effect<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }, E1 | E2, R1 | R2>
388
388
  } = doNotation.bind<Effect.EffectTypeLambda>(core.map, core.flatMap)
389
389
 
@@ -397,21 +397,21 @@ export const bindTo: {
397
397
  export const let_: {
398
398
  <N extends string, A extends object, B>(
399
399
  name: Exclude<N, keyof A>,
400
- f: (a: NoInfer<A>) => B
400
+ f: (a: Types.NoInfer<A>) => B
401
401
  ): <E, R>(
402
402
  self: Effect.Effect<A, E, R>
403
403
  ) => Effect.Effect<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }, E, R>
404
404
  <A extends object, N extends string, E, R, B>(
405
405
  self: Effect.Effect<A, E, R>,
406
406
  name: Exclude<N, keyof A>,
407
- f: (a: NoInfer<A>) => B
407
+ f: (a: Types.NoInfer<A>) => B
408
408
  ): Effect.Effect<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }, E, R>
409
409
  } = doNotation.let_<Effect.EffectTypeLambda>(core.map)
410
410
 
411
411
  /* @internal */
412
412
  export const dropUntil: {
413
413
  <A, E, R>(
414
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
414
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
415
415
  ): (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>
416
416
  <A, E, R>(
417
417
  elements: Iterable<A>,
@@ -447,7 +447,7 @@ export const dropUntil: {
447
447
  /* @internal */
448
448
  export const dropWhile: {
449
449
  <A, E, R>(
450
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
450
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
451
451
  ): (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>
452
452
  <A, E, R>(
453
453
  elements: Iterable<A>,
@@ -506,12 +506,12 @@ export const filterMap = dual<
506
506
  /* @internal */
507
507
  export const filterOrDie: {
508
508
  <A, B extends A>(
509
- refinement: Predicate.Refinement<NoInfer<A>, B>,
510
- orDieWith: (a: NoInfer<A>) => unknown
509
+ refinement: Predicate.Refinement<Types.NoInfer<A>, B>,
510
+ orDieWith: (a: Types.NoInfer<A>) => unknown
511
511
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
512
512
  <A>(
513
- predicate: Predicate.Predicate<NoInfer<A>>,
514
- orDieWith: (a: NoInfer<A>) => unknown
513
+ predicate: Predicate.Predicate<Types.NoInfer<A>>,
514
+ orDieWith: (a: Types.NoInfer<A>) => unknown
515
515
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
516
516
  <A, E, R, B extends A>(
517
517
  self: Effect.Effect<A, E, R>,
@@ -535,11 +535,11 @@ export const filterOrDie: {
535
535
  /* @internal */
536
536
  export const filterOrDieMessage: {
537
537
  <A, B extends A>(
538
- refinement: Predicate.Refinement<NoInfer<A>, B>,
538
+ refinement: Predicate.Refinement<Types.NoInfer<A>, B>,
539
539
  message: string
540
540
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
541
541
  <A>(
542
- predicate: Predicate.Predicate<NoInfer<A>>,
542
+ predicate: Predicate.Predicate<Types.NoInfer<A>>,
543
543
  message: string
544
544
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
545
545
  <A, E, R, B extends A>(
@@ -557,12 +557,12 @@ export const filterOrDieMessage: {
557
557
  /* @internal */
558
558
  export const filterOrElse: {
559
559
  <A, B extends A, C, E2, R2>(
560
- refinement: Predicate.Refinement<NoInfer<A>, B>,
561
- orElse: (a: NoInfer<A>) => Effect.Effect<C, E2, R2>
560
+ refinement: Predicate.Refinement<Types.NoInfer<A>, B>,
561
+ orElse: (a: Types.NoInfer<A>) => Effect.Effect<C, E2, R2>
562
562
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B | C, E2 | E, R2 | R>
563
563
  <A, B, E2, R2>(
564
- predicate: Predicate.Predicate<NoInfer<A>>,
565
- orElse: (a: NoInfer<A>) => Effect.Effect<B, E2, R2>
564
+ predicate: Predicate.Predicate<Types.NoInfer<A>>,
565
+ orElse: (a: Types.NoInfer<A>) => Effect.Effect<B, E2, R2>
566
566
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | B, E2 | E, R2 | R>
567
567
  <A, E, R, B extends A, C, E2, R2>(
568
568
  self: Effect.Effect<A, E, R>,
@@ -588,12 +588,12 @@ export const filterOrElse: {
588
588
  export const liftPredicate = dual<
589
589
  {
590
590
  <A, B extends A, E>(
591
- refinement: Predicate.Refinement<NoInfer<A>, B>,
592
- orFailWith: (a: NoInfer<A>) => E
591
+ refinement: Predicate.Refinement<Types.NoInfer<A>, B>,
592
+ orFailWith: (a: Types.NoInfer<A>) => E
593
593
  ): (a: A) => Effect.Effect<B, E>
594
594
  <A, E>(
595
- predicate: Predicate.Predicate<NoInfer<A>>,
596
- orFailWith: (a: NoInfer<A>) => E
595
+ predicate: Predicate.Predicate<Types.NoInfer<A>>,
596
+ orFailWith: (a: Types.NoInfer<A>) => E
597
597
  ): (a: A) => Effect.Effect<A, E>
598
598
  },
599
599
  {
@@ -604,34 +604,34 @@ export const liftPredicate = dual<
604
604
  ): Effect.Effect<B, E>
605
605
  <A, E>(
606
606
  self: A,
607
- predicate: Predicate.Predicate<NoInfer<A>>,
608
- orFailWith: (a: NoInfer<A>) => E
607
+ predicate: Predicate.Predicate<Types.NoInfer<A>>,
608
+ orFailWith: (a: Types.NoInfer<A>) => E
609
609
  ): Effect.Effect<A, E>
610
610
  }
611
611
  >(
612
612
  3,
613
613
  <A, E>(
614
614
  self: A,
615
- predicate: Predicate.Predicate<NoInfer<A>>,
616
- orFailWith: (a: NoInfer<A>) => E
615
+ predicate: Predicate.Predicate<Types.NoInfer<A>>,
616
+ orFailWith: (a: Types.NoInfer<A>) => E
617
617
  ): Effect.Effect<A, E> => core.suspend(() => predicate(self) ? core.succeed(self) : core.fail(orFailWith(self)))
618
618
  )
619
619
 
620
620
  /* @internal */
621
621
  export const filterOrFail: {
622
622
  <A, B extends A, E2>(
623
- refinement: Predicate.Refinement<NoInfer<A>, B>,
624
- orFailWith: (a: NoInfer<A>) => E2
623
+ refinement: Predicate.Refinement<Types.NoInfer<A>, B>,
624
+ orFailWith: (a: Types.NoInfer<A>) => E2
625
625
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E2 | E, R>
626
626
  <A, E2>(
627
- predicate: Predicate.Predicate<NoInfer<A>>,
628
- orFailWith: (a: NoInfer<A>) => E2
627
+ predicate: Predicate.Predicate<Types.NoInfer<A>>,
628
+ orFailWith: (a: Types.NoInfer<A>) => E2
629
629
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2 | E, R>
630
630
  <A, B extends A>(
631
- refinement: Predicate.Refinement<NoInfer<A>, B>
631
+ refinement: Predicate.Refinement<Types.NoInfer<A>, B>
632
632
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, Cause.NoSuchElementException | E, R>
633
633
  <A>(
634
- predicate: Predicate.Predicate<NoInfer<A>>
634
+ predicate: Predicate.Predicate<Types.NoInfer<A>>
635
635
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, Cause.NoSuchElementException | E, R>
636
636
  <A, E, R, B extends A, E2>(
637
637
  self: Effect.Effect<A, E, R>,
@@ -666,17 +666,17 @@ export const filterOrFail: {
666
666
  /* @internal */
667
667
  export const findFirst: {
668
668
  <A, E, R>(
669
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
669
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
670
670
  ): (elements: Iterable<A>) => Effect.Effect<Option.Option<A>, E, R>
671
671
  <A, E, R>(
672
672
  elements: Iterable<A>,
673
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
673
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
674
674
  ): Effect.Effect<Option.Option<A>, E, R>
675
675
  } = dual(
676
676
  2,
677
677
  <A, E, R>(
678
678
  elements: Iterable<A>,
679
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
679
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
680
680
  ): Effect.Effect<Option.Option<A>, E, R> =>
681
681
  core.suspend(() => {
682
682
  const iterator = elements[Symbol.iterator]()
@@ -1195,25 +1195,25 @@ export const promise = <A>(evaluate: (signal: AbortSignal) => PromiseLike<A>): E
1195
1195
 
1196
1196
  /* @internal */
1197
1197
  export const provideService = dual<
1198
- <T extends Context.Tag<any, any>>(
1199
- tag: T,
1200
- service: Context.Tag.Service<T>
1201
- ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>>,
1202
- <A, E, R, T extends Context.Tag<any, any>>(
1198
+ <I, S>(
1199
+ tag: Context.Tag<I, S>,
1200
+ service: Types.NoInfer<S>
1201
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, I>>,
1202
+ <A, E, R, I, S>(
1203
1203
  self: Effect.Effect<A, E, R>,
1204
- tag: T,
1205
- service: Context.Tag.Service<T>
1206
- ) => Effect.Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>>
1204
+ tag: Context.Tag<I, S>,
1205
+ service: Types.NoInfer<S>
1206
+ ) => Effect.Effect<A, E, Exclude<R, I>>
1207
1207
  >(
1208
1208
  3,
1209
- <A, E, R, T extends Context.Tag<any, any>>(
1209
+ <A, E, R, I, S>(
1210
1210
  self: Effect.Effect<A, E, R>,
1211
- tag: T,
1212
- service: Context.Tag.Service<T>
1213
- ): Effect.Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>> =>
1211
+ tag: Context.Tag<I, S>,
1212
+ service: Types.NoInfer<S>
1213
+ ): Effect.Effect<A, E, Exclude<R, I>> =>
1214
1214
  core.contextWithEffect((env) =>
1215
1215
  core.provideContext(
1216
- self as Effect.Effect<A, E, Context.Tag.Identifier<T> | Exclude<R, Context.Tag.Identifier<T>>>,
1216
+ self as Effect.Effect<A, E, I | Exclude<R, I>>,
1217
1217
  Context.add(env, tag, service)
1218
1218
  )
1219
1219
  )
@@ -1221,21 +1221,21 @@ export const provideService = dual<
1221
1221
 
1222
1222
  /* @internal */
1223
1223
  export const provideServiceEffect = dual<
1224
- <T extends Context.Tag<any, any>, E1, R1>(
1225
- tag: T,
1226
- effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
1227
- ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E1, R1 | Exclude<R, Context.Tag.Identifier<T>>>,
1228
- <A, E, R, T extends Context.Tag<any, any>, E1, R1>(
1224
+ <I, S, E1, R1>(
1225
+ tag: Context.Tag<I, S>,
1226
+ effect: Effect.Effect<Types.NoInfer<S>, E1, R1>
1227
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E1, R1 | Exclude<R, I>>,
1228
+ <A, E, R, I, S, E1, R1>(
1229
1229
  self: Effect.Effect<A, E, R>,
1230
- tag: T,
1231
- effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
1232
- ) => Effect.Effect<A, E | E1, R1 | Exclude<R, Context.Tag.Identifier<T>>>
1233
- >(3, <A, E, R, T extends Context.Tag<any, any>, E1, R1>(
1230
+ tag: Context.Tag<I, S>,
1231
+ effect: Effect.Effect<Types.NoInfer<S>, E1, R1>
1232
+ ) => Effect.Effect<A, E | E1, R1 | Exclude<R, I>>
1233
+ >(3, <A, E, R, I, S, E1, R1>(
1234
1234
  self: Effect.Effect<A, E, R>,
1235
- tag: T,
1236
- effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
1235
+ tag: Context.Tag<I, S>,
1236
+ effect: Effect.Effect<Types.NoInfer<S>, E1, R1>
1237
1237
  ) =>
1238
- core.contextWithEffect((env: Context.Context<R1 | Exclude<R, Context.Tag.Identifier<T>>>) =>
1238
+ core.contextWithEffect((env: Context.Context<R1 | Exclude<R, I>>) =>
1239
1239
  core.flatMap(
1240
1240
  effect,
1241
1241
  (service) => core.provideContext(self, pipe(env, Context.add(tag, service)) as Context.Context<R | R1>)
@@ -1426,17 +1426,17 @@ export const labelMetrics = dual<
1426
1426
  /* @internal */
1427
1427
  export const takeUntil: {
1428
1428
  <A, R, E>(
1429
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1429
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1430
1430
  ): (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>
1431
1431
  <A, E, R>(
1432
1432
  elements: Iterable<A>,
1433
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1433
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1434
1434
  ): Effect.Effect<Array<A>, E, R>
1435
1435
  } = dual(
1436
1436
  2,
1437
1437
  <A, E, R>(
1438
1438
  elements: Iterable<A>,
1439
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1439
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1440
1440
  ): Effect.Effect<Array<A>, E, R> =>
1441
1441
  core.suspend(() => {
1442
1442
  const iterator = elements[Symbol.iterator]()
@@ -1462,15 +1462,15 @@ export const takeUntil: {
1462
1462
  /* @internal */
1463
1463
  export const takeWhile = dual<
1464
1464
  <A, E, R>(
1465
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1465
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1466
1466
  ) => (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>,
1467
1467
  <A, E, R>(
1468
1468
  elements: Iterable<A>,
1469
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1469
+ predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1470
1470
  ) => Effect.Effect<Array<A>, E, R>
1471
1471
  >(
1472
1472
  2,
1473
- <A, E, R>(elements: Iterable<A>, predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>) =>
1473
+ <A, E, R>(elements: Iterable<A>, predicate: (a: Types.NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>) =>
1474
1474
  core.suspend(() => {
1475
1475
  const iterator = elements[Symbol.iterator]()
1476
1476
  const builder: Array<A> = []
@@ -1499,8 +1499,8 @@ export const takeWhile = dual<
1499
1499
  export const tapBoth = dual<
1500
1500
  <E, X, E2, R2, A, X1, E3, R3>(
1501
1501
  options: {
1502
- readonly onFailure: (e: NoInfer<E>) => Effect.Effect<X, E2, R2>
1503
- readonly onSuccess: (a: NoInfer<A>) => Effect.Effect<X1, E3, R3>
1502
+ readonly onFailure: (e: Types.NoInfer<E>) => Effect.Effect<X, E2, R2>
1503
+ readonly onSuccess: (a: Types.NoInfer<A>) => Effect.Effect<X1, E3, R3>
1504
1504
  }
1505
1505
  ) => <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2 | E3, R | R2 | R3>,
1506
1506
  <A, E, R, X, E2, R2, X1, E3, R3>(
@@ -1545,7 +1545,7 @@ export const tapDefect = dual<
1545
1545
  /* @internal */
1546
1546
  export const tapError = dual<
1547
1547
  <E, X, E2, R2>(
1548
- f: (e: NoInfer<E>) => Effect.Effect<X, E2, R2>
1548
+ f: (e: Types.NoInfer<E>) => Effect.Effect<X, E2, R2>
1549
1549
  ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>,
1550
1550
  <A, E, R, X, E2, R2>(
1551
1551
  self: Effect.Effect<A, E, R>,
@@ -1587,7 +1587,7 @@ export const tapErrorTag = dual<
1587
1587
  /* @internal */
1588
1588
  export const tapErrorCause = dual<
1589
1589
  <E, X, E2, R2>(
1590
- f: (cause: Cause.Cause<NoInfer<E>>) => Effect.Effect<X, E2, R2>
1590
+ f: (cause: Cause.Cause<Types.NoInfer<E>>) => Effect.Effect<X, E2, R2>
1591
1591
  ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>,
1592
1592
  <A, E, R, X, E2, R2>(
1593
1593
  self: Effect.Effect<A, E, R>,
@@ -1768,26 +1768,26 @@ export const updateFiberRefs = (
1768
1768
 
1769
1769
  /* @internal */
1770
1770
  export const updateService = dual<
1771
- <T extends Context.Tag<any, any>>(
1772
- tag: T,
1773
- f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1774
- ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R | Context.Tag.Identifier<T>>,
1775
- <A, E, R, T extends Context.Tag<any, any>>(
1771
+ <I, S>(
1772
+ tag: Context.Tag<I, S>,
1773
+ f: (service: Types.NoInfer<S>) => Types.NoInfer<S>
1774
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R | I>,
1775
+ <A, E, R, I, S>(
1776
1776
  self: Effect.Effect<A, E, R>,
1777
- tag: T,
1778
- f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1779
- ) => Effect.Effect<A, E, R | Context.Tag.Identifier<T>>
1780
- >(3, <A, E, R, T extends Context.Tag<any, any>>(
1777
+ tag: Context.Tag<I, S>,
1778
+ f: (service: Types.NoInfer<S>) => Types.NoInfer<S>
1779
+ ) => Effect.Effect<A, E, R | I>
1780
+ >(3, <A, E, R, I, S>(
1781
1781
  self: Effect.Effect<A, E, R>,
1782
- tag: T,
1783
- f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1782
+ tag: Context.Tag<I, S>,
1783
+ f: (service: Types.NoInfer<S>) => Types.NoInfer<S>
1784
1784
  ) =>
1785
1785
  core.mapInputContext(self, (context) =>
1786
1786
  Context.add(
1787
1787
  context,
1788
1788
  tag,
1789
1789
  f(Context.unsafeGet(context, tag))
1790
- )) as Effect.Effect<A, E, R | Context.Tag.Identifier<T>>)
1790
+ )) as Effect.Effect<A, E, R | I>)
1791
1791
 
1792
1792
  /* @internal */
1793
1793
  export const when = dual<
@@ -1421,6 +1421,24 @@ export const gen: typeof Effect.gen = function() {
1421
1421
  return fromIterator(() => f(pipe))
1422
1422
  }
1423
1423
 
1424
+ /** @internal */
1425
+ export const fnUntraced: Effect.fn.Gen = (body: Function, ...pipeables: Array<any>) =>
1426
+ Object.defineProperty(
1427
+ pipeables.length === 0
1428
+ ? function(this: any, ...args: Array<any>) {
1429
+ return fromIterator(() => body.apply(this, args))
1430
+ }
1431
+ : function(this: any, ...args: Array<any>) {
1432
+ let effect = fromIterator(() => body.apply(this, args))
1433
+ for (const x of pipeables) {
1434
+ effect = x(effect, ...args)
1435
+ }
1436
+ return effect
1437
+ },
1438
+ "length",
1439
+ { value: body.length, configurable: true }
1440
+ )
1441
+
1424
1442
  /* @internal */
1425
1443
  export const withConcurrency = dual<
1426
1444
  (concurrency: number | "unbounded") => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
@@ -3040,6 +3058,68 @@ export const mapInputContext = dual<
3040
3058
  f: (context: Context.Context<R2>) => Context.Context<R>
3041
3059
  ) => contextWithEffect((context: Context.Context<R2>) => provideContext(self, f(context))))
3042
3060
 
3061
+ // -----------------------------------------------------------------------------
3062
+ // Filtering
3063
+ // -----------------------------------------------------------------------------
3064
+
3065
+ /** @internal */
3066
+ export const filterEffectOrElse: {
3067
+ <A, E2, R2, A2, E3, R3>(
3068
+ options: {
3069
+ readonly predicate: (a: NoInfer<A>) => Effect.Effect<boolean, E2, R2>
3070
+ readonly orElse: (a: NoInfer<A>) => Effect.Effect<A2, E3, R3>
3071
+ }
3072
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, E | E2 | E3, R | R2 | R3>
3073
+ <A, E, R, E2, R2, A2, E3, R3>(
3074
+ self: Effect.Effect<A, E, R>,
3075
+ options: {
3076
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3077
+ readonly orElse: (a: A) => Effect.Effect<A2, E3, R3>
3078
+ }
3079
+ ): Effect.Effect<A | A2, E | E2 | E3, R | R2 | R3>
3080
+ } = dual(2, <A, E, R, E2, R2, A2, E3, R3>(
3081
+ self: Effect.Effect<A, E, R>,
3082
+ options: {
3083
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3084
+ readonly orElse: (a: A) => Effect.Effect<A2, E3, R3>
3085
+ }
3086
+ ): Effect.Effect<A | A2, E | E2 | E3, R | R2 | R3> =>
3087
+ flatMap(
3088
+ self,
3089
+ (a) =>
3090
+ flatMap(
3091
+ options.predicate(a),
3092
+ (pass): Effect.Effect<A | A2, E3, R3> => pass ? succeed(a) : options.orElse(a)
3093
+ )
3094
+ ))
3095
+
3096
+ /** @internal */
3097
+ export const filterEffectOrFail: {
3098
+ <A, E2, R2, E3>(
3099
+ options: {
3100
+ readonly predicate: (a: NoInfer<A>) => Effect.Effect<boolean, E2, R2>
3101
+ readonly orFailWith: (a: NoInfer<A>) => E3
3102
+ }
3103
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2 | E3, R | R2>
3104
+ <A, E, R, E2, R2, E3>(
3105
+ self: Effect.Effect<A, E, R>,
3106
+ options: {
3107
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3108
+ readonly orFailWith: (a: A) => E3
3109
+ }
3110
+ ): Effect.Effect<A, E | E2 | E3, R | R2>
3111
+ } = dual(2, <A, E, R, E2, R2, E3>(
3112
+ self: Effect.Effect<A, E, R>,
3113
+ options: {
3114
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3115
+ readonly orFailWith: (a: A) => E3
3116
+ }
3117
+ ): Effect.Effect<A, E | E2 | E3, R | R2> =>
3118
+ filterEffectOrElse(self, {
3119
+ predicate: options.predicate,
3120
+ orElse: (a) => fail(options.orFailWith(a))
3121
+ }))
3122
+
3043
3123
  // -----------------------------------------------------------------------------
3044
3124
  // Tracing
3045
3125
  // -----------------------------------------------------------------------------
@@ -306,6 +306,9 @@ export const unsafeNow: LazyArg<DateTime.Utc> = () => makeUtc(Date.now())
306
306
  // time zones
307
307
  // =============================================================================
308
308
 
309
+ /** @internal */
310
+ export const toUtc = (self: DateTime.DateTime): DateTime.Utc => makeUtc(self.epochMillis)
311
+
309
312
  /** @internal */
310
313
  export const setZone: {
311
314
  (zone: DateTime.TimeZone, options?: {
@@ -7,6 +7,7 @@ import * as Dual from "../Function.js"
7
7
  import { constant, identity } from "../Function.js"
8
8
  import type { HashMap } from "../HashMap.js"
9
9
  import type { HashSet } from "../HashSet.js"
10
+ import { pipeArguments } from "../Pipeable.js"
10
11
  import * as ChunkPatch from "./differ/chunkPatch.js"
11
12
  import * as ContextPatch from "./differ/contextPatch.js"
12
13
  import * as HashMapPatch from "./differ/hashMapPatch.js"
@@ -22,6 +23,9 @@ export const DifferProto = {
22
23
  [DifferTypeId]: {
23
24
  _P: identity,
24
25
  _V: identity
26
+ },
27
+ pipe() {
28
+ return pipeArguments(this, arguments)
25
29
  }
26
30
  }
27
31
 
@@ -371,10 +371,11 @@ export const forkIn = dual<
371
371
  core.void :
372
372
  core.asVoid(core.interruptFiber(fiber))
373
373
  )
374
- scopeImpl.state.finalizers.add(finalizer)
374
+ const key = {}
375
+ scopeImpl.state.finalizers.set(key, finalizer)
375
376
  fiber.addObserver(() => {
376
377
  if (scopeImpl.state._tag === "Closed") return
377
- scopeImpl.state.finalizers.delete(finalizer)
378
+ scopeImpl.state.finalizers.delete(key)
378
379
  })
379
380
  } else {
380
381
  fiber.unsafeInterruptAsFork(parent.id())
@@ -1631,6 +1631,30 @@ export const annotateLogsScoped: {
1631
1631
  )
1632
1632
  }
1633
1633
 
1634
+ /** @internal */
1635
+ export const whenLogLevel = dual<
1636
+ (
1637
+ level: LogLevel.LogLevel | LogLevel.Literal
1638
+ ) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<Option.Option<A>, E, R>,
1639
+ <A, E, R>(
1640
+ effect: Effect.Effect<A, E, R>,
1641
+ level: LogLevel.LogLevel | LogLevel.Literal
1642
+ ) => Effect.Effect<Option.Option<A>, E, R>
1643
+ >(2, (effect, level) => {
1644
+ const requiredLogLevel = typeof level === "string" ? LogLevel.fromLiteral(level) : level
1645
+
1646
+ return core.withFiberRuntime((fiberState) => {
1647
+ const minimumLogLevel = fiberState.getFiberRef(currentMinimumLogLevel)
1648
+
1649
+ // Imitate the behaviour of `FiberRuntime.log`
1650
+ if (LogLevel.greaterThan(minimumLogLevel, requiredLogLevel)) {
1651
+ return core.succeed(Option.none())
1652
+ }
1653
+
1654
+ return core.map(effect, Option.some)
1655
+ })
1656
+ })
1657
+
1634
1658
  // circular with Effect
1635
1659
 
1636
1660
  /* @internal */
@@ -3211,7 +3235,7 @@ export const scope: Effect.Effect<Scope.Scope, never, Scope.Scope> = scopeTag
3211
3235
  export interface ScopeImpl extends Scope.CloseableScope {
3212
3236
  state: {
3213
3237
  readonly _tag: "Open"
3214
- readonly finalizers: Set<Scope.Scope.Finalizer>
3238
+ readonly finalizers: Map<{}, Scope.Scope.Finalizer>
3215
3239
  } | {
3216
3240
  readonly _tag: "Closed"
3217
3241
  readonly exit: Exit.Exit<unknown, unknown>
@@ -3220,7 +3244,7 @@ export interface ScopeImpl extends Scope.CloseableScope {
3220
3244
 
3221
3245
  const scopeUnsafeAddFinalizer = (scope: ScopeImpl, fin: Scope.Scope.Finalizer): void => {
3222
3246
  if (scope.state._tag === "Open") {
3223
- scope.state.finalizers.add(fin)
3247
+ scope.state.finalizers.set({}, fin)
3224
3248
  }
3225
3249
  }
3226
3250
 
@@ -3237,12 +3261,13 @@ const ScopeImplProto: Omit<ScopeImpl, "strategy" | "state"> = {
3237
3261
  newScope.state = this.state
3238
3262
  return newScope
3239
3263
  }
3264
+ const key = {}
3240
3265
  const fin = (exit: Exit.Exit<unknown, unknown>) => newScope.close(exit)
3241
- this.state.finalizers.add(fin)
3266
+ this.state.finalizers.set(key, fin)
3242
3267
  scopeUnsafeAddFinalizer(newScope, (_) =>
3243
3268
  core.sync(() => {
3244
3269
  if (this.state._tag === "Open") {
3245
- this.state.finalizers.delete(fin)
3270
+ this.state.finalizers.delete(key)
3246
3271
  }
3247
3272
  }))
3248
3273
  return newScope
@@ -3297,7 +3322,7 @@ const ScopeImplProto: Omit<ScopeImpl, "strategy" | "state"> = {
3297
3322
  if (this.state._tag === "Closed") {
3298
3323
  return fin(this.state.exit)
3299
3324
  }
3300
- this.state.finalizers.add(fin)
3325
+ this.state.finalizers.set({}, fin)
3301
3326
  return core.void
3302
3327
  })
3303
3328
  }
@@ -3308,7 +3333,7 @@ const scopeUnsafeMake = (
3308
3333
  ): ScopeImpl => {
3309
3334
  const scope = Object.create(ScopeImplProto)
3310
3335
  scope.strategy = strategy
3311
- scope.state = { _tag: "Open", finalizers: new Set() }
3336
+ scope.state = { _tag: "Open", finalizers: new Map() }
3312
3337
  return scope
3313
3338
  }
3314
3339
 
@@ -539,3 +539,19 @@ export const findFirst: {
539
539
  return Option.none()
540
540
  }
541
541
  )
542
+
543
+ /** @internal */
544
+ export const some: {
545
+ <K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HM.HashMap<K, A>) => boolean
546
+ <K, A>(self: HM.HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean
547
+ } = Dual.dual(
548
+ 2,
549
+ <K, A>(self: HM.HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean => {
550
+ for (const ka of self) {
551
+ if (predicate(ka[1], ka[0])) {
552
+ return true
553
+ }
554
+ }
555
+ return false
556
+ }
557
+ )
@@ -174,7 +174,7 @@ const makeImpl = <K, A, E, R>(
174
174
  }
175
175
  })
176
176
  const activePools: Effect.Effect<Array<Pool.Pool<A, E>>> = core.suspend(() =>
177
- core.forEachSequential(Array.from(HashMap.values(MutableRef.get(map))), (value) => {
177
+ core.forEachSequential(HashMap.toValues(MutableRef.get(map)), (value) => {
178
178
  switch (value._tag) {
179
179
  case "Complete": {
180
180
  return core.succeed(value.pool)