effect 3.12.11 → 3.12.12

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 (97) hide show
  1. package/README.md +38 -49
  2. package/dist/cjs/Channel.js.map +1 -1
  3. package/dist/cjs/Effect.js +26 -22
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Layer.js.map +1 -1
  6. package/dist/cjs/Match.js +659 -38
  7. package/dist/cjs/Match.js.map +1 -1
  8. package/dist/cjs/Reloadable.js.map +1 -1
  9. package/dist/cjs/STM.js.map +1 -1
  10. package/dist/cjs/Schedule.js +1074 -309
  11. package/dist/cjs/Schedule.js.map +1 -1
  12. package/dist/cjs/Schema.js.map +1 -1
  13. package/dist/cjs/Stream.js.map +1 -1
  14. package/dist/cjs/internal/channel.js.map +1 -1
  15. package/dist/cjs/internal/core-effect.js.map +1 -1
  16. package/dist/cjs/internal/effect/circular.js +3 -2
  17. package/dist/cjs/internal/effect/circular.js.map +1 -1
  18. package/dist/cjs/internal/fiberRuntime.js +6 -5
  19. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  20. package/dist/cjs/internal/layer.js.map +1 -1
  21. package/dist/cjs/internal/reloadable.js.map +1 -1
  22. package/dist/cjs/internal/schedule.js.map +1 -1
  23. package/dist/cjs/internal/sink.js.map +1 -1
  24. package/dist/cjs/internal/stm/stm.js.map +1 -1
  25. package/dist/cjs/internal/stream.js.map +1 -1
  26. package/dist/cjs/internal/version.js +1 -1
  27. package/dist/dts/Channel.d.ts +4 -4
  28. package/dist/dts/Channel.d.ts.map +1 -1
  29. package/dist/dts/Effect.d.ts +6 -6
  30. package/dist/dts/Effect.d.ts.map +1 -1
  31. package/dist/dts/Layer.d.ts +12 -12
  32. package/dist/dts/Layer.d.ts.map +1 -1
  33. package/dist/dts/Match.d.ts +731 -48
  34. package/dist/dts/Match.d.ts.map +1 -1
  35. package/dist/dts/Reloadable.d.ts +13 -13
  36. package/dist/dts/Reloadable.d.ts.map +1 -1
  37. package/dist/dts/STM.d.ts +4 -4
  38. package/dist/dts/STM.d.ts.map +1 -1
  39. package/dist/dts/Schedule.d.ts +2294 -633
  40. package/dist/dts/Schedule.d.ts.map +1 -1
  41. package/dist/dts/Schema.d.ts +10 -4
  42. package/dist/dts/Schema.d.ts.map +1 -1
  43. package/dist/dts/Stream.d.ts +8 -8
  44. package/dist/dts/Stream.d.ts.map +1 -1
  45. package/dist/dts/index.d.ts +25 -0
  46. package/dist/dts/index.d.ts.map +1 -1
  47. package/dist/dts/internal/stm/stm.d.ts +2 -2
  48. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  49. package/dist/esm/Channel.js.map +1 -1
  50. package/dist/esm/Effect.js +26 -22
  51. package/dist/esm/Effect.js.map +1 -1
  52. package/dist/esm/Layer.js.map +1 -1
  53. package/dist/esm/Match.js +665 -40
  54. package/dist/esm/Match.js.map +1 -1
  55. package/dist/esm/Reloadable.js.map +1 -1
  56. package/dist/esm/STM.js.map +1 -1
  57. package/dist/esm/Schedule.js +1074 -309
  58. package/dist/esm/Schedule.js.map +1 -1
  59. package/dist/esm/Schema.js.map +1 -1
  60. package/dist/esm/Stream.js.map +1 -1
  61. package/dist/esm/index.js +25 -0
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/internal/channel.js.map +1 -1
  64. package/dist/esm/internal/core-effect.js.map +1 -1
  65. package/dist/esm/internal/effect/circular.js +3 -2
  66. package/dist/esm/internal/effect/circular.js.map +1 -1
  67. package/dist/esm/internal/fiberRuntime.js +6 -5
  68. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  69. package/dist/esm/internal/layer.js.map +1 -1
  70. package/dist/esm/internal/reloadable.js.map +1 -1
  71. package/dist/esm/internal/schedule.js.map +1 -1
  72. package/dist/esm/internal/sink.js.map +1 -1
  73. package/dist/esm/internal/stm/stm.js.map +1 -1
  74. package/dist/esm/internal/stream.js.map +1 -1
  75. package/dist/esm/internal/version.js +1 -1
  76. package/package.json +1 -1
  77. package/src/Channel.ts +14 -17
  78. package/src/Effect.ts +43 -41
  79. package/src/Layer.ts +30 -39
  80. package/src/Match.ts +733 -49
  81. package/src/Reloadable.ts +17 -27
  82. package/src/STM.ts +10 -17
  83. package/src/Schedule.ts +2325 -653
  84. package/src/Schema.ts +4 -4
  85. package/src/Stream.ts +26 -33
  86. package/src/index.ts +25 -0
  87. package/src/internal/channel.ts +37 -39
  88. package/src/internal/core-effect.ts +84 -84
  89. package/src/internal/effect/circular.ts +3 -2
  90. package/src/internal/fiberRuntime.ts +7 -6
  91. package/src/internal/layer.ts +52 -52
  92. package/src/internal/reloadable.ts +25 -28
  93. package/src/internal/schedule.ts +29 -23
  94. package/src/internal/sink.ts +16 -15
  95. package/src/internal/stm/stm.ts +54 -46
  96. package/src/internal/stream.ts +100 -100
  97. 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<
@@ -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())
@@ -3211,7 +3211,7 @@ export const scope: Effect.Effect<Scope.Scope, never, Scope.Scope> = scopeTag
3211
3211
  export interface ScopeImpl extends Scope.CloseableScope {
3212
3212
  state: {
3213
3213
  readonly _tag: "Open"
3214
- readonly finalizers: Set<Scope.Scope.Finalizer>
3214
+ readonly finalizers: Map<{}, Scope.Scope.Finalizer>
3215
3215
  } | {
3216
3216
  readonly _tag: "Closed"
3217
3217
  readonly exit: Exit.Exit<unknown, unknown>
@@ -3220,7 +3220,7 @@ export interface ScopeImpl extends Scope.CloseableScope {
3220
3220
 
3221
3221
  const scopeUnsafeAddFinalizer = (scope: ScopeImpl, fin: Scope.Scope.Finalizer): void => {
3222
3222
  if (scope.state._tag === "Open") {
3223
- scope.state.finalizers.add(fin)
3223
+ scope.state.finalizers.set({}, fin)
3224
3224
  }
3225
3225
  }
3226
3226
 
@@ -3237,12 +3237,13 @@ const ScopeImplProto: Omit<ScopeImpl, "strategy" | "state"> = {
3237
3237
  newScope.state = this.state
3238
3238
  return newScope
3239
3239
  }
3240
+ const key = {}
3240
3241
  const fin = (exit: Exit.Exit<unknown, unknown>) => newScope.close(exit)
3241
- this.state.finalizers.add(fin)
3242
+ this.state.finalizers.set(key, fin)
3242
3243
  scopeUnsafeAddFinalizer(newScope, (_) =>
3243
3244
  core.sync(() => {
3244
3245
  if (this.state._tag === "Open") {
3245
- this.state.finalizers.delete(fin)
3246
+ this.state.finalizers.delete(key)
3246
3247
  }
3247
3248
  }))
3248
3249
  return newScope
@@ -3297,7 +3298,7 @@ const ScopeImplProto: Omit<ScopeImpl, "strategy" | "state"> = {
3297
3298
  if (this.state._tag === "Closed") {
3298
3299
  return fin(this.state.exit)
3299
3300
  }
3300
- this.state.finalizers.add(fin)
3301
+ this.state.finalizers.set({}, fin)
3301
3302
  return core.void
3302
3303
  })
3303
3304
  }
@@ -3308,7 +3309,7 @@ const scopeUnsafeMake = (
3308
3309
  ): ScopeImpl => {
3309
3310
  const scope = Object.create(ScopeImplProto)
3310
3311
  scope.strategy = strategy
3311
- scope.state = { _tag: "Open", finalizers: new Set() }
3312
+ scope.state = { _tag: "Open", finalizers: new Map() }
3312
3313
  return scope
3313
3314
  }
3314
3315
 
@@ -20,6 +20,7 @@ import * as Intervals from "../ScheduleIntervals.js"
20
20
  import * as Scope from "../Scope.js"
21
21
  import type * as Synchronized from "../SynchronizedRef.js"
22
22
  import type * as Tracer from "../Tracer.js"
23
+ import type * as Types from "../Types.js"
23
24
  import * as effect from "./core-effect.js"
24
25
  import * as core from "./core.js"
25
26
  import * as circular from "./effect/circular.js"
@@ -542,15 +543,15 @@ export const fresh = <A, E, R>(self: Layer.Layer<A, E, R>): Layer.Layer<A, E, R>
542
543
 
543
544
  /** @internal */
544
545
  export const fromEffect = dual<
545
- <T extends Context.Tag<any, any>>(
546
- tag: T
546
+ <I, S>(
547
+ tag: Context.Tag<I, S>
547
548
  ) => <E, R>(
548
- effect: Effect.Effect<Context.Tag.Service<T>, E, R>
549
- ) => Layer.Layer<Context.Tag.Identifier<T>, E, R>,
550
- <T extends Context.Tag<any, any>, E, R>(
551
- tag: T,
552
- effect: Effect.Effect<Context.Tag.Service<T>, E, R>
553
- ) => Layer.Layer<Context.Tag.Identifier<T>, E, R>
549
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
550
+ ) => Layer.Layer<I, E, R>,
551
+ <I, S, E, R>(
552
+ tag: Context.Tag<I, S>,
553
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
554
+ ) => Layer.Layer<I, E, R>
554
555
  >(2, (a, b) => {
555
556
  const tagFirst = Context.isTag(a)
556
557
  const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
@@ -610,12 +611,11 @@ export const fiberRefLocallyScopedWith = <A>(self: FiberRef<A>, value: (_: A) =>
610
611
  scopedDiscard(fiberRuntime.fiberRefLocallyScopedWith(self, value))
611
612
 
612
613
  /** @internal */
613
- export const fromFunction = <A extends Context.Tag<any, any>, B extends Context.Tag<any, any>>(
614
- tagA: A,
615
- tagB: B,
616
- f: (a: Context.Tag.Service<A>) => Context.Tag.Service<B>
617
- ): Layer.Layer<Context.Tag.Identifier<B>, never, Context.Tag.Identifier<A>> =>
618
- fromEffectContext(core.map(tagA, (a) => Context.make(tagB, f(a))))
614
+ export const fromFunction = <I1, S1, I2, S2>(
615
+ tagA: Context.Tag<I1, S1>,
616
+ tagB: Context.Tag<I2, S2>,
617
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
618
+ ): Layer.Layer<I2, never, I1> => fromEffectContext(core.map(tagA, (a) => Context.make(tagB, f(a))))
619
619
 
620
620
  /** @internal */
621
621
  export const launch = <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>): Effect.Effect<never, E, RIn> =>
@@ -761,17 +761,17 @@ export const passthrough = <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>): Laye
761
761
 
762
762
  /** @internal */
763
763
  export const project = dual<
764
- <A extends Context.Tag<any, any>, B extends Context.Tag<any, any>>(
765
- tagA: A,
766
- tagB: B,
767
- f: (a: Context.Tag.Service<A>) => Context.Tag.Service<B>
768
- ) => <RIn, E>(self: Layer.Layer<Context.Tag.Identifier<A>, E, RIn>) => Layer.Layer<Context.Tag.Identifier<B>, E, RIn>,
769
- <RIn, E, A extends Context.Tag<any, any>, B extends Context.Tag<any, any>>(
770
- self: Layer.Layer<Context.Tag.Identifier<A>, E, RIn>,
771
- tagA: A,
772
- tagB: B,
773
- f: (a: Context.Tag.Service<A>) => Context.Tag.Service<B>
774
- ) => Layer.Layer<Context.Tag.Identifier<B>, E, RIn>
764
+ <I1, S1, I2, S2>(
765
+ tagA: Context.Tag<I1, S1>,
766
+ tagB: Context.Tag<I2, S2>,
767
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
768
+ ) => <RIn, E>(self: Layer.Layer<I1, E, RIn>) => Layer.Layer<I2, E, RIn>,
769
+ <RIn, E, I1, S1, I2, S2>(
770
+ self: Layer.Layer<I1, E, RIn>,
771
+ tagA: Context.Tag<I1, S1>,
772
+ tagB: Context.Tag<I2, S2>,
773
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
774
+ ) => Layer.Layer<I2, E, RIn>
775
775
  >(4, (self, tagA, tagB, f) => map(self, (context) => Context.make(tagB, f(Context.unsafeGet(context, tagA)))))
776
776
 
777
777
  /** @internal */
@@ -842,15 +842,15 @@ const retryUpdate = <X, E, RIn>(
842
842
 
843
843
  /** @internal */
844
844
  export const scoped = dual<
845
- <T extends Context.Tag<any, any>>(
846
- tag: T
845
+ <I, S>(
846
+ tag: Context.Tag<I, S>
847
847
  ) => <E, R>(
848
- effect: Effect.Effect<Context.Tag.Service<T>, E, R>
849
- ) => Layer.Layer<Context.Tag.Identifier<T>, E, Exclude<R, Scope.Scope>>,
850
- <T extends Context.Tag<any, any>, E, R>(
851
- tag: T,
852
- effect: Effect.Effect<Context.Tag.Service<T>, E, R>
853
- ) => Layer.Layer<Context.Tag.Identifier<T>, E, Exclude<R, Scope.Scope>>
848
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
849
+ ) => Layer.Layer<I, E, Exclude<R, Scope.Scope>>,
850
+ <I, S, E, R>(
851
+ tag: Context.Tag<I, S>,
852
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
853
+ ) => Layer.Layer<I, E, Exclude<R, Scope.Scope>>
854
854
  >(2, (a, b) => {
855
855
  const tagFirst = Context.isTag(a)
856
856
  const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
@@ -885,21 +885,21 @@ export const scope: Layer.Layer<Scope.Scope> = scopedContext(
885
885
  )
886
886
 
887
887
  /** @internal */
888
- export const service = <T extends Context.Tag<any, any>>(
889
- tag: T
890
- ): Layer.Layer<Context.Tag.Identifier<T>, never, Context.Tag.Identifier<T>> => fromEffect(tag, tag)
888
+ export const service = <I, S>(
889
+ tag: Context.Tag<I, S>
890
+ ): Layer.Layer<I, never, I> => fromEffect(tag, tag)
891
891
 
892
892
  /** @internal */
893
893
  export const succeed = dual<
894
- <T extends Context.Tag<any, any>>(
895
- tag: T
894
+ <I, S>(
895
+ tag: Context.Tag<I, S>
896
896
  ) => (
897
- resource: Context.Tag.Service<T>
898
- ) => Layer.Layer<Context.Tag.Identifier<T>>,
899
- <T extends Context.Tag<any, any>>(
900
- tag: T,
901
- resource: Context.Tag.Service<T>
902
- ) => Layer.Layer<Context.Tag.Identifier<T>>
897
+ resource: Types.NoInfer<S>
898
+ ) => Layer.Layer<I>,
899
+ <I, S>(
900
+ tag: Context.Tag<I, S>,
901
+ resource: Types.NoInfer<S>
902
+ ) => Layer.Layer<I>
903
903
  >(2, (a, b) => {
904
904
  const tagFirst = Context.isTag(a)
905
905
  const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
@@ -929,15 +929,15 @@ export const suspend = <RIn, E, ROut>(
929
929
 
930
930
  /** @internal */
931
931
  export const sync = dual<
932
- <T extends Context.Tag<any, any>>(
933
- tag: T
932
+ <I, S>(
933
+ tag: Context.Tag<I, S>
934
934
  ) => (
935
- evaluate: LazyArg<Context.Tag.Service<T>>
936
- ) => Layer.Layer<Context.Tag.Identifier<T>>,
937
- <T extends Context.Tag<any, any>>(
938
- tag: T,
939
- evaluate: LazyArg<Context.Tag.Service<T>>
940
- ) => Layer.Layer<Context.Tag.Identifier<T>>
935
+ evaluate: LazyArg<Types.NoInfer<S>>
936
+ ) => Layer.Layer<I>,
937
+ <I, S>(
938
+ tag: Context.Tag<I, S>,
939
+ evaluate: LazyArg<Types.NoInfer<S>>
940
+ ) => Layer.Layer<I>
941
941
  >(2, (a, b) => {
942
942
  const tagFirst = Context.isTag(a)
943
943
  const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>