effect 2.3.8 → 2.4.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 (279) hide show
  1. package/dist/cjs/BigInt.js +14 -1
  2. package/dist/cjs/BigInt.js.map +1 -1
  3. package/dist/cjs/Effect.js +48 -61
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Either.js +35 -6
  6. package/dist/cjs/Either.js.map +1 -1
  7. package/dist/cjs/Equal.js +1 -1
  8. package/dist/cjs/Equal.js.map +1 -1
  9. package/dist/cjs/Exit.js +1 -1
  10. package/dist/cjs/Number.js +25 -1
  11. package/dist/cjs/Number.js.map +1 -1
  12. package/dist/cjs/Predicate.js +40 -3
  13. package/dist/cjs/Predicate.js.map +1 -1
  14. package/dist/cjs/ReadonlyArray.js +2 -2
  15. package/dist/cjs/ReadonlyArray.js.map +1 -1
  16. package/dist/cjs/ReadonlyRecord.js +71 -76
  17. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  18. package/dist/cjs/STM.js.map +1 -1
  19. package/dist/cjs/Schedule.js.map +1 -1
  20. package/dist/cjs/Sink.js.map +1 -1
  21. package/dist/cjs/Stream.js +3 -23
  22. package/dist/cjs/Stream.js.map +1 -1
  23. package/dist/cjs/Struct.js +3 -1
  24. package/dist/cjs/Struct.js.map +1 -1
  25. package/dist/cjs/TestAnnotation.js.map +1 -1
  26. package/dist/cjs/internal/channel/channelExecutor.js +5 -5
  27. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  28. package/dist/cjs/internal/channel/channelState.js +5 -5
  29. package/dist/cjs/internal/channel/channelState.js.map +1 -1
  30. package/dist/cjs/internal/channel.js.map +1 -1
  31. package/dist/cjs/internal/clock.js +3 -4
  32. package/dist/cjs/internal/clock.js.map +1 -1
  33. package/dist/cjs/internal/core-effect.js +6 -23
  34. package/dist/cjs/internal/core-effect.js.map +1 -1
  35. package/dist/cjs/internal/core.js +11 -27
  36. package/dist/cjs/internal/core.js.map +1 -1
  37. package/dist/cjs/internal/effect/circular.js +4 -5
  38. package/dist/cjs/internal/effect/circular.js.map +1 -1
  39. package/dist/cjs/internal/either.js +3 -3
  40. package/dist/cjs/internal/either.js.map +1 -1
  41. package/dist/cjs/internal/groupBy.js.map +1 -1
  42. package/dist/cjs/internal/layer.js +0 -2
  43. package/dist/cjs/internal/layer.js.map +1 -1
  44. package/dist/cjs/internal/runtime.js +12 -1
  45. package/dist/cjs/internal/runtime.js.map +1 -1
  46. package/dist/cjs/internal/schedule.js +4 -4
  47. package/dist/cjs/internal/schedule.js.map +1 -1
  48. package/dist/cjs/internal/sink.js +0 -2
  49. package/dist/cjs/internal/sink.js.map +1 -1
  50. package/dist/cjs/internal/stm/stm.js +1 -0
  51. package/dist/cjs/internal/stm/stm.js.map +1 -1
  52. package/dist/cjs/internal/stream.js +51 -64
  53. package/dist/cjs/internal/stream.js.map +1 -1
  54. package/dist/cjs/internal/version.js +1 -1
  55. package/dist/dts/BigInt.d.ts +7 -0
  56. package/dist/dts/BigInt.d.ts.map +1 -1
  57. package/dist/dts/Brand.d.ts +1 -1
  58. package/dist/dts/Brand.d.ts.map +1 -1
  59. package/dist/dts/Cause.d.ts +1 -1
  60. package/dist/dts/Cause.d.ts.map +1 -1
  61. package/dist/dts/Channel.d.ts +11 -11
  62. package/dist/dts/Channel.d.ts.map +1 -1
  63. package/dist/dts/Chunk.d.ts +3 -3
  64. package/dist/dts/Config.d.ts +4 -4
  65. package/dist/dts/Config.d.ts.map +1 -1
  66. package/dist/dts/Cron.d.ts +1 -1
  67. package/dist/dts/Cron.d.ts.map +1 -1
  68. package/dist/dts/Differ.d.ts +2 -2
  69. package/dist/dts/Differ.d.ts.map +1 -1
  70. package/dist/dts/Effect.d.ts +84 -108
  71. package/dist/dts/Effect.d.ts.map +1 -1
  72. package/dist/dts/Either.d.ts +126 -83
  73. package/dist/dts/Either.d.ts.map +1 -1
  74. package/dist/dts/Encoding.d.ts +6 -6
  75. package/dist/dts/Encoding.d.ts.map +1 -1
  76. package/dist/dts/Equal.d.ts.map +1 -1
  77. package/dist/dts/Exit.d.ts +2 -2
  78. package/dist/dts/Fiber.d.ts +2 -2
  79. package/dist/dts/Fiber.d.ts.map +1 -1
  80. package/dist/dts/GroupBy.d.ts +12 -12
  81. package/dist/dts/GroupBy.d.ts.map +1 -1
  82. package/dist/dts/Layer.d.ts +26 -26
  83. package/dist/dts/Layer.d.ts.map +1 -1
  84. package/dist/dts/List.d.ts +2 -2
  85. package/dist/dts/Logger.d.ts +4 -4
  86. package/dist/dts/Match.d.ts +2 -2
  87. package/dist/dts/Match.d.ts.map +1 -1
  88. package/dist/dts/MergeDecision.d.ts +1 -1
  89. package/dist/dts/MergeState.d.ts +5 -5
  90. package/dist/dts/MergeState.d.ts.map +1 -1
  91. package/dist/dts/Metric.d.ts +13 -13
  92. package/dist/dts/Metric.d.ts.map +1 -1
  93. package/dist/dts/MetricPolling.d.ts +4 -4
  94. package/dist/dts/MetricPolling.d.ts.map +1 -1
  95. package/dist/dts/Number.d.ts +8 -0
  96. package/dist/dts/Number.d.ts.map +1 -1
  97. package/dist/dts/Option.d.ts +11 -11
  98. package/dist/dts/Predicate.d.ts +37 -2
  99. package/dist/dts/Predicate.d.ts.map +1 -1
  100. package/dist/dts/ReadonlyArray.d.ts +9 -8
  101. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  102. package/dist/dts/ReadonlyRecord.d.ts +111 -94
  103. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  104. package/dist/dts/Reloadable.d.ts +4 -4
  105. package/dist/dts/Reloadable.d.ts.map +1 -1
  106. package/dist/dts/RequestResolver.d.ts +13 -13
  107. package/dist/dts/RequestResolver.d.ts.map +1 -1
  108. package/dist/dts/Resource.d.ts +1 -1
  109. package/dist/dts/Resource.d.ts.map +1 -1
  110. package/dist/dts/STM.d.ts +144 -139
  111. package/dist/dts/STM.d.ts.map +1 -1
  112. package/dist/dts/Schedule.d.ts +171 -179
  113. package/dist/dts/Schedule.d.ts.map +1 -1
  114. package/dist/dts/SingleProducerAsyncInput.d.ts +1 -1
  115. package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -1
  116. package/dist/dts/Sink.d.ts +13 -13
  117. package/dist/dts/Sink.d.ts.map +1 -1
  118. package/dist/dts/Stream.d.ts +355 -366
  119. package/dist/dts/Stream.d.ts.map +1 -1
  120. package/dist/dts/Struct.d.ts +3 -3
  121. package/dist/dts/Struct.d.ts.map +1 -1
  122. package/dist/dts/SubscriptionRef.d.ts +2 -2
  123. package/dist/dts/TArray.d.ts +2 -2
  124. package/dist/dts/TDeferred.d.ts +3 -3
  125. package/dist/dts/TMap.d.ts +10 -10
  126. package/dist/dts/TSet.d.ts +4 -4
  127. package/dist/dts/Take.d.ts +2 -2
  128. package/dist/dts/TestAnnotation.d.ts +2 -2
  129. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  130. package/dist/dts/Types.d.ts +7 -0
  131. package/dist/dts/Types.d.ts.map +1 -1
  132. package/dist/dts/internal/stm/stm.d.ts +2 -15
  133. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  134. package/dist/esm/BigInt.js +12 -0
  135. package/dist/esm/BigInt.js.map +1 -1
  136. package/dist/esm/Effect.js +45 -58
  137. package/dist/esm/Effect.js.map +1 -1
  138. package/dist/esm/Either.js +42 -5
  139. package/dist/esm/Either.js.map +1 -1
  140. package/dist/esm/Equal.js +1 -1
  141. package/dist/esm/Equal.js.map +1 -1
  142. package/dist/esm/Exit.js +1 -1
  143. package/dist/esm/Number.js +23 -0
  144. package/dist/esm/Number.js.map +1 -1
  145. package/dist/esm/Predicate.js +37 -2
  146. package/dist/esm/Predicate.js.map +1 -1
  147. package/dist/esm/ReadonlyArray.js +2 -2
  148. package/dist/esm/ReadonlyArray.js.map +1 -1
  149. package/dist/esm/ReadonlyRecord.js +70 -75
  150. package/dist/esm/ReadonlyRecord.js.map +1 -1
  151. package/dist/esm/STM.js.map +1 -1
  152. package/dist/esm/Schedule.js.map +1 -1
  153. package/dist/esm/Sink.js.map +1 -1
  154. package/dist/esm/Stream.js +5 -22
  155. package/dist/esm/Stream.js.map +1 -1
  156. package/dist/esm/Struct.js +3 -1
  157. package/dist/esm/Struct.js.map +1 -1
  158. package/dist/esm/TestAnnotation.js.map +1 -1
  159. package/dist/esm/internal/channel/channelExecutor.js +5 -5
  160. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  161. package/dist/esm/internal/channel/channelState.js +3 -3
  162. package/dist/esm/internal/channel/channelState.js.map +1 -1
  163. package/dist/esm/internal/channel.js.map +1 -1
  164. package/dist/esm/internal/clock.js +3 -4
  165. package/dist/esm/internal/clock.js.map +1 -1
  166. package/dist/esm/internal/core-effect.js +4 -20
  167. package/dist/esm/internal/core-effect.js.map +1 -1
  168. package/dist/esm/internal/core.js +8 -22
  169. package/dist/esm/internal/core.js.map +1 -1
  170. package/dist/esm/internal/effect/circular.js +4 -5
  171. package/dist/esm/internal/effect/circular.js.map +1 -1
  172. package/dist/esm/internal/either.js +3 -3
  173. package/dist/esm/internal/either.js.map +1 -1
  174. package/dist/esm/internal/groupBy.js.map +1 -1
  175. package/dist/esm/internal/layer.js +0 -2
  176. package/dist/esm/internal/layer.js.map +1 -1
  177. package/dist/esm/internal/runtime.js +12 -1
  178. package/dist/esm/internal/runtime.js.map +1 -1
  179. package/dist/esm/internal/schedule.js +4 -4
  180. package/dist/esm/internal/schedule.js.map +1 -1
  181. package/dist/esm/internal/sink.js +0 -2
  182. package/dist/esm/internal/sink.js.map +1 -1
  183. package/dist/esm/internal/stm/stm.js +1 -0
  184. package/dist/esm/internal/stm/stm.js.map +1 -1
  185. package/dist/esm/internal/stream.js +49 -59
  186. package/dist/esm/internal/stream.js.map +1 -1
  187. package/dist/esm/internal/version.js +1 -1
  188. package/package.json +1 -1
  189. package/src/BigInt.ts +13 -0
  190. package/src/Brand.ts +4 -4
  191. package/src/Cause.ts +1 -1
  192. package/src/Channel.ts +17 -17
  193. package/src/Chunk.ts +4 -4
  194. package/src/Config.ts +4 -4
  195. package/src/Cron.ts +2 -2
  196. package/src/Differ.ts +2 -2
  197. package/src/Effect.ts +100 -145
  198. package/src/Either.ts +215 -133
  199. package/src/Encoding.ts +3 -3
  200. package/src/Equal.ts +1 -1
  201. package/src/Exit.ts +2 -2
  202. package/src/Fiber.ts +2 -2
  203. package/src/GroupBy.ts +16 -16
  204. package/src/Layer.ts +32 -32
  205. package/src/List.ts +3 -3
  206. package/src/Logger.ts +4 -4
  207. package/src/Match.ts +3 -3
  208. package/src/MergeDecision.ts +1 -1
  209. package/src/MergeState.ts +8 -8
  210. package/src/Metric.ts +13 -13
  211. package/src/MetricPolling.ts +9 -9
  212. package/src/Number.ts +26 -0
  213. package/src/Option.ts +17 -17
  214. package/src/Predicate.ts +39 -2
  215. package/src/ReadonlyArray.ts +23 -15
  216. package/src/ReadonlyRecord.ts +421 -265
  217. package/src/Reloadable.ts +4 -4
  218. package/src/RequestResolver.ts +19 -19
  219. package/src/Resource.ts +3 -3
  220. package/src/STM.ts +166 -213
  221. package/src/Schedule.ts +331 -361
  222. package/src/SingleProducerAsyncInput.ts +1 -1
  223. package/src/Sink.ts +19 -19
  224. package/src/Stream.ts +449 -456
  225. package/src/Struct.ts +8 -5
  226. package/src/SubscriptionRef.ts +2 -2
  227. package/src/TArray.ts +2 -2
  228. package/src/TDeferred.ts +4 -4
  229. package/src/TMap.ts +10 -10
  230. package/src/TSet.ts +4 -4
  231. package/src/Take.ts +4 -4
  232. package/src/TestAnnotation.ts +5 -8
  233. package/src/Types.ts +11 -0
  234. package/src/internal/blockedRequests.ts +2 -2
  235. package/src/internal/cause.ts +2 -2
  236. package/src/internal/channel/channelExecutor.ts +26 -26
  237. package/src/internal/channel/channelState.ts +13 -13
  238. package/src/internal/channel/mergeDecision.ts +1 -1
  239. package/src/internal/channel/mergeState.ts +6 -6
  240. package/src/internal/channel/singleProducerAsyncInput.ts +5 -5
  241. package/src/internal/channel.ts +43 -43
  242. package/src/internal/clock.ts +3 -4
  243. package/src/internal/config.ts +7 -7
  244. package/src/internal/configError.ts +1 -1
  245. package/src/internal/configProvider/pathPatch.ts +2 -2
  246. package/src/internal/configProvider.ts +1 -1
  247. package/src/internal/core-effect.ts +28 -43
  248. package/src/internal/core.ts +15 -40
  249. package/src/internal/dataSource.ts +26 -26
  250. package/src/internal/differ/orPatch.ts +7 -7
  251. package/src/internal/differ.ts +2 -2
  252. package/src/internal/effect/circular.ts +9 -10
  253. package/src/internal/either.ts +25 -22
  254. package/src/internal/encoding/base64.ts +1 -1
  255. package/src/internal/encoding/base64Url.ts +1 -1
  256. package/src/internal/encoding/hex.ts +1 -1
  257. package/src/internal/fiber.ts +2 -2
  258. package/src/internal/fiberRuntime.ts +9 -9
  259. package/src/internal/groupBy.ts +40 -40
  260. package/src/internal/layer/circular.ts +4 -4
  261. package/src/internal/layer.ts +52 -54
  262. package/src/internal/matcher.ts +5 -5
  263. package/src/internal/metric/polling.ts +8 -8
  264. package/src/internal/metric.ts +6 -6
  265. package/src/internal/reloadable.ts +4 -4
  266. package/src/internal/resource.ts +2 -2
  267. package/src/internal/runtime.ts +32 -19
  268. package/src/internal/schedule.ts +430 -500
  269. package/src/internal/sink.ts +27 -29
  270. package/src/internal/stm/core.ts +23 -23
  271. package/src/internal/stm/stm.ts +158 -157
  272. package/src/internal/stm/tArray.ts +3 -3
  273. package/src/internal/stm/tDeferred.ts +5 -5
  274. package/src/internal/stm/tMap.ts +13 -13
  275. package/src/internal/stm/tSet.ts +4 -4
  276. package/src/internal/stream.ts +688 -723
  277. package/src/internal/subscriptionRef.ts +3 -3
  278. package/src/internal/take.ts +6 -6
  279. package/src/internal/version.ts +1 -1
@@ -480,22 +480,6 @@ export const async = <A, E = never, R = never>(
480
480
  effect
481
481
  })
482
482
 
483
- /* @internal */
484
- export const asyncEither = <A, E = never, R = never>(
485
- register: (
486
- resume: (effect: Effect.Effect<A, E, R>) => void
487
- ) => Either.Either<Effect.Effect<void, never, R>, Effect.Effect<A, E, R>>,
488
- blockingOn: FiberId.FiberId = FiberId.none
489
- ): Effect.Effect<A, E, R> =>
490
- async<A, E, R>((resume) => {
491
- const result = register(resume)
492
- if (Either.isRight(result)) {
493
- resume(result.right)
494
- } else {
495
- return result.left
496
- }
497
- }, blockingOn)
498
-
499
483
  /* @internal */
500
484
  export const catchAllCause = dual<
501
485
  <E, A2, E2, R2>(
@@ -530,15 +514,6 @@ export const catchAll: {
530
514
  ): Effect.Effect<A2 | A, E2, R2 | R> => matchEffect(self, { onFailure: f, onSuccess: succeed })
531
515
  )
532
516
 
533
- /**
534
- * @macro identity
535
- * @internal
536
- */
537
- export const unified = <Args extends ReadonlyArray<any>, Ret extends Effect.Effect<any, any, any>>(
538
- f: (...args: Args) => Ret
539
- ) =>
540
- (...args: Args): Effect.Effect.Unify<Ret> => f(...args)
541
-
542
517
  /* @internal */
543
518
  export const catchIf: {
544
519
  <E, EB extends E, A2, E2, R2>(
@@ -650,7 +625,7 @@ export const dieMessage = (message: string): Effect.Effect<never> =>
650
625
  export const dieSync = (evaluate: LazyArg<unknown>): Effect.Effect<never> => flatMap(sync(evaluate), die)
651
626
 
652
627
  /* @internal */
653
- export const either = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Either.Either<E, A>, never, R> =>
628
+ export const either = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Either.Either<A, E>, never, R> =>
654
629
  matchEffect(self, {
655
630
  onFailure: (e) => succeed(Either.left(e)),
656
631
  onSuccess: (a) => succeed(Either.right(a))
@@ -728,13 +703,13 @@ export const andThen: {
728
703
  ) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
729
704
  : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
730
705
  : Effect.Effect<X, E, R>
731
- <A, R, E, X>(
706
+ <A, E, R, X>(
732
707
  self: Effect.Effect<A, E, R>,
733
708
  f: (a: NoInfer<A>) => X
734
709
  ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
735
710
  : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
736
711
  : Effect.Effect<X, E, R>
737
- <A, R, E, X>(
712
+ <A, E, R, X>(
738
713
  self: Effect.Effect<A, E, R>,
739
714
  f: X
740
715
  ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
@@ -941,7 +916,7 @@ export const if_ = dual<
941
916
  (self: boolean | Effect.Effect<unknown, unknown, unknown>, { onFalse, onTrue }: {
942
917
  readonly onTrue: Effect.Effect<unknown, unknown, unknown>
943
918
  readonly onFalse: Effect.Effect<unknown, unknown, unknown>
944
- }) => typeof self === "boolean" ? (self ? onTrue : onFalse) : flatMap(self, unified((b) => (b ? onTrue : onFalse)))
919
+ }) => typeof self === "boolean" ? (self ? onTrue : onFalse) : flatMap(self, (b) => (b ? onTrue : onFalse))
945
920
  )
946
921
 
947
922
  /* @internal */
@@ -1051,7 +1026,7 @@ export const onError: {
1051
1026
  } = dual(2, <A, E, R, X, R2>(
1052
1027
  self: Effect.Effect<A, E, R>,
1053
1028
  cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1054
- ): Effect.Effect<A, E, R2 | R> => onExit(self, unified((exit) => exitIsSuccess(exit) ? unit : cleanup(exit.i0))))
1029
+ ): Effect.Effect<A, E, R2 | R> => onExit(self, (exit) => exitIsSuccess(exit) ? unit : cleanup(exit.i0)))
1055
1030
 
1056
1031
  /* @internal */
1057
1032
  export const onExit: {
@@ -1142,7 +1117,7 @@ export const orDieWith: {
1142
1117
  /* @internal */
1143
1118
  export const partitionMap = <A, A1, A2>(
1144
1119
  elements: Iterable<A>,
1145
- f: (a: A) => Either.Either<A1, A2>
1120
+ f: (a: A) => Either.Either<A2, A1>
1146
1121
  ): [left: Array<A1>, right: Array<A2>] =>
1147
1122
  ReadonlyArray.fromIterable(elements).reduceRight(
1148
1123
  ([lefts, rights], current) => {
@@ -1462,11 +1437,11 @@ export const zipWith: {
1462
1437
  ): Effect.Effect<B, E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => f(a, b))))
1463
1438
 
1464
1439
  /* @internal */
1465
- export const never: Effect.Effect<never> = asyncEither<never>(() => {
1440
+ export const never: Effect.Effect<never> = async<never>(() => {
1466
1441
  const interval = setInterval(() => {
1467
1442
  //
1468
1443
  }, 2 ** 31 - 1)
1469
- return Either.left(sync(() => clearInterval(interval)))
1444
+ return sync(() => clearInterval(interval))
1470
1445
  })
1471
1446
 
1472
1447
  // -----------------------------------------------------------------------------
@@ -1723,7 +1698,7 @@ const requestResolverVariance = {
1723
1698
  }
1724
1699
 
1725
1700
  /** @internal */
1726
- export class RequestResolverImpl<out R, in A> implements RequestResolver.RequestResolver<A, R> {
1701
+ export class RequestResolverImpl<in A, out R> implements RequestResolver.RequestResolver<A, R> {
1727
1702
  readonly [RequestResolverTypeId] = requestResolverVariance
1728
1703
  constructor(
1729
1704
  readonly runAll: (
@@ -1773,7 +1748,7 @@ export const resolverLocally = dual<
1773
1748
  self: FiberRef.FiberRef<A>,
1774
1749
  value: A
1775
1750
  ): RequestResolver.RequestResolver<B, R> =>
1776
- new RequestResolverImpl<R, B>(
1751
+ new RequestResolverImpl<B, R>(
1777
1752
  (requests) =>
1778
1753
  fiberRefLocally(
1779
1754
  use.runAll(requests),
@@ -2538,7 +2513,7 @@ export const exitForEachEffect: {
2538
2513
  })
2539
2514
 
2540
2515
  /** @internal */
2541
- export const exitFromEither = <E, A>(either: Either.Either<E, A>): Exit.Exit<A, E> => {
2516
+ export const exitFromEither = <R, L>(either: Either.Either<R, L>): Exit.Exit<R, L> => {
2542
2517
  switch (either._tag) {
2543
2518
  case "Left":
2544
2519
  return exitFail(either.left)
@@ -2844,18 +2819,18 @@ export const deferredMakeAs = <A, E = never>(fiberId: FiberId.FiberId): Effect.E
2844
2819
 
2845
2820
  /* @internal */
2846
2821
  export const deferredAwait = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<A, E> =>
2847
- asyncEither<A, E>((k) => {
2822
+ async<A, E>((resume) => {
2848
2823
  const state = MutableRef.get(self.state)
2849
2824
  switch (state._tag) {
2850
2825
  case DeferredOpCodes.OP_STATE_DONE: {
2851
- return Either.right(state.effect)
2826
+ return resume(state.effect)
2852
2827
  }
2853
2828
  case DeferredOpCodes.OP_STATE_PENDING: {
2854
2829
  pipe(
2855
2830
  self.state,
2856
- MutableRef.set(deferred.pending([k, ...state.joiners]))
2831
+ MutableRef.set(deferred.pending([resume, ...state.joiners]))
2857
2832
  )
2858
- return Either.left(deferredInterruptJoiner(self, k))
2833
+ return deferredInterruptJoiner(self, resume)
2859
2834
  }
2860
2835
  }
2861
2836
  }, self.blockingOn)
@@ -13,21 +13,21 @@ import { invokeWithInterrupt, zipWithOptions } from "./fiberRuntime.js"
13
13
  import { complete } from "./request.js"
14
14
 
15
15
  /** @internal */
16
- export const make = <R, A>(
16
+ export const make = <A, R>(
17
17
  runAll: (requests: Array<Array<A>>) => Effect.Effect<void, never, R>
18
18
  ): RequestResolver.RequestResolver<A, R> =>
19
19
  new core.RequestResolverImpl((requests) => runAll(requests.map((_) => _.map((_) => _.request))))
20
20
 
21
21
  /** @internal */
22
- export const makeWithEntry = <R, A>(
22
+ export const makeWithEntry = <A, R>(
23
23
  runAll: (requests: Array<Array<Request.Entry<A>>>) => Effect.Effect<void, never, R>
24
24
  ): RequestResolver.RequestResolver<A, R> => new core.RequestResolverImpl((requests) => runAll(requests))
25
25
 
26
26
  /** @internal */
27
- export const makeBatched = <R, A extends Request.Request<any, any>>(
27
+ export const makeBatched = <A extends Request.Request<any, any>, R>(
28
28
  run: (requests: Array<A>) => Effect.Effect<void, never, R>
29
29
  ): RequestResolver.RequestResolver<A, R> =>
30
- new core.RequestResolverImpl<R, A>(
30
+ new core.RequestResolverImpl<A, R>(
31
31
  (requests) =>
32
32
  requests.length > 1 ?
33
33
  core.forEachSequentialDiscard(requests, (block) =>
@@ -50,16 +50,16 @@ export const makeBatched = <R, A extends Request.Request<any, any>>(
50
50
 
51
51
  /** @internal */
52
52
  export const around = dual<
53
- <R2, A2, R3, _>(
53
+ <A2, R2, X, R3>(
54
54
  before: Effect.Effect<A2, never, R2>,
55
- after: (a: A2) => Effect.Effect<_, never, R3>
56
- ) => <R, A>(
55
+ after: (a: A2) => Effect.Effect<X, never, R3>
56
+ ) => <A, R>(
57
57
  self: RequestResolver.RequestResolver<A, R>
58
58
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>,
59
- <R, A, R2, A2, R3, _>(
59
+ <A, R, A2, R2, X, R3>(
60
60
  self: RequestResolver.RequestResolver<A, R>,
61
61
  before: Effect.Effect<A2, never, R2>,
62
- after: (a: A2) => Effect.Effect<_, never, R3>
62
+ after: (a: A2) => Effect.Effect<X, never, R3>
63
63
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>
64
64
  >(3, (self, before, after) =>
65
65
  new core.RequestResolverImpl(
@@ -74,16 +74,16 @@ export const around = dual<
74
74
 
75
75
  /** @internal */
76
76
  export const aroundRequests = dual<
77
- <A, R2, A2, R3, _>(
77
+ <A, A2, R2, X, R3>(
78
78
  before: (requests: ReadonlyArray<NoInfer<A>>) => Effect.Effect<A2, never, R2>,
79
- after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<_, never, R3>
79
+ after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<X, never, R3>
80
80
  ) => <R>(
81
81
  self: RequestResolver.RequestResolver<A, R>
82
82
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>,
83
- <R, A, R2, A2, R3, _>(
83
+ <A, R, A2, R2, X, R3>(
84
84
  self: RequestResolver.RequestResolver<A, R>,
85
85
  before: (requests: ReadonlyArray<NoInfer<A>>) => Effect.Effect<A2, never, R2>,
86
- after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<_, never, R3>
86
+ after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<X, never, R3>
87
87
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>
88
88
  >(3, (self, before, after) =>
89
89
  new core.RequestResolverImpl(
@@ -100,14 +100,14 @@ export const aroundRequests = dual<
100
100
 
101
101
  /** @internal */
102
102
  export const batchN = dual<
103
- (n: number) => <R, A>(
103
+ (n: number) => <A, R>(
104
104
  self: RequestResolver.RequestResolver<A, R>
105
105
  ) => RequestResolver.RequestResolver<A, R>,
106
- <R, A>(
106
+ <A, R>(
107
107
  self: RequestResolver.RequestResolver<A, R>,
108
108
  n: number
109
109
  ) => RequestResolver.RequestResolver<A, R>
110
- >(2, <R, A>(
110
+ >(2, <A, R>(
111
111
  self: RequestResolver.RequestResolver<A, R>,
112
112
  n: number
113
113
  ): RequestResolver.RequestResolver<A, R> =>
@@ -144,7 +144,7 @@ export const mapInputContext = dual<
144
144
  self: RequestResolver.RequestResolver<A, R>,
145
145
  f: (context: Context.Context<R0>) => Context.Context<R>
146
146
  ) =>
147
- new core.RequestResolverImpl<R0, A>(
147
+ new core.RequestResolverImpl<A, R0>(
148
148
  (requests) =>
149
149
  core.mapInputContext(
150
150
  self.runAll(requests),
@@ -162,7 +162,7 @@ export const eitherWith = dual<
162
162
  C extends Request.Request<any, any>
163
163
  >(
164
164
  that: RequestResolver.RequestResolver<B, R2>,
165
- f: (_: Request.Entry<C>) => Either.Either<Request.Entry<A>, Request.Entry<B>>
165
+ f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
166
166
  ) => <R>(
167
167
  self: RequestResolver.RequestResolver<A, R>
168
168
  ) => RequestResolver.RequestResolver<C, R | R2>,
@@ -175,7 +175,7 @@ export const eitherWith = dual<
175
175
  >(
176
176
  self: RequestResolver.RequestResolver<A, R>,
177
177
  that: RequestResolver.RequestResolver<B, R2>,
178
- f: (_: Request.Entry<C>) => Either.Either<Request.Entry<A>, Request.Entry<B>>
178
+ f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
179
179
  ) => RequestResolver.RequestResolver<C, R | R2>
180
180
  >(3, <
181
181
  R,
@@ -186,9 +186,9 @@ export const eitherWith = dual<
186
186
  >(
187
187
  self: RequestResolver.RequestResolver<A, R>,
188
188
  that: RequestResolver.RequestResolver<B, R2>,
189
- f: (_: Request.Entry<C>) => Either.Either<Request.Entry<A>, Request.Entry<B>>
189
+ f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
190
190
  ) =>
191
- new core.RequestResolverImpl<R | R2, C>(
191
+ new core.RequestResolverImpl<C, R | R2>(
192
192
  (batch) =>
193
193
  pipe(
194
194
  core.forEachSequential(batch, (requests) => {
@@ -262,7 +262,7 @@ export const fromEffectTagged = <
262
262
  A,
263
263
  ReturnType<Fns[keyof Fns]> extends Effect.Effect<infer _A, infer _E, infer R> ? R : never
264
264
  > =>
265
- makeBatched<any, A>((requests: Array<A>) => {
265
+ makeBatched<A, any>((requests: Array<A>) => {
266
266
  const grouped: Record<string, Array<A>> = {}
267
267
  const tags: Array<A["_tag"]> = []
268
268
  for (let i = 0, len = requests.length; i < len; i++) {
@@ -308,16 +308,16 @@ export const provideContext = dual<
308
308
 
309
309
  /** @internal */
310
310
  export const race = dual<
311
- <R2, A2 extends Request.Request<any, any>>(
311
+ <A2 extends Request.Request<any, any>, R2>(
312
312
  that: RequestResolver.RequestResolver<A2, R2>
313
- ) => <R, A extends Request.Request<any, any>>(
313
+ ) => <A extends Request.Request<any, any>, R>(
314
314
  self: RequestResolver.RequestResolver<A, R>
315
315
  ) => RequestResolver.RequestResolver<A | A2, R | R2>,
316
- <R, A extends Request.Request<any, any>, R2, A2 extends Request.Request<any, any>>(
316
+ <A extends Request.Request<any, any>, R, A2 extends Request.Request<any, any>, R2>(
317
317
  self: RequestResolver.RequestResolver<A, R>,
318
318
  that: RequestResolver.RequestResolver<A2, R2>
319
319
  ) => RequestResolver.RequestResolver<A | A2, R | R2>
320
- >(2, <R, A, R2, A2>(
320
+ >(2, <A, R, A2, R2>(
321
321
  self: RequestResolver.RequestResolver<A, R>,
322
322
  that: RequestResolver.RequestResolver<A2, R2>
323
323
  ) =>
@@ -188,8 +188,8 @@ type Instruction =
188
188
  /** @internal */
189
189
  export const diff = <Value, Value2, Patch, Patch2>(
190
190
  options: {
191
- readonly oldValue: Either<Value, Value2>
192
- readonly newValue: Either<Value, Value2>
191
+ readonly oldValue: Either<Value2, Value>
192
+ readonly newValue: Either<Value2, Value>
193
193
  readonly left: Differ<Value, Patch>
194
194
  readonly right: Differ<Value2, Patch2>
195
195
  }
@@ -243,23 +243,23 @@ export const combine = Dual.dual<
243
243
  export const patch = Dual.dual<
244
244
  <Value, Value2, Patch, Patch2>(
245
245
  options: {
246
- readonly oldValue: Either<Value, Value2>
246
+ readonly oldValue: Either<Value2, Value>
247
247
  readonly left: Differ<Value, Patch>
248
248
  readonly right: Differ<Value2, Patch2>
249
249
  }
250
- ) => (self: Differ.Or.Patch<Value, Value2, Patch, Patch2>) => Either<Value, Value2>,
250
+ ) => (self: Differ.Or.Patch<Value, Value2, Patch, Patch2>) => Either<Value2, Value>,
251
251
  <Value, Value2, Patch, Patch2>(
252
252
  self: Differ.Or.Patch<Value, Value2, Patch, Patch2>,
253
253
  options: {
254
- readonly oldValue: Either<Value, Value2>
254
+ readonly oldValue: Either<Value2, Value>
255
255
  readonly left: Differ<Value, Patch>
256
256
  readonly right: Differ<Value2, Patch2>
257
257
  }
258
- ) => Either<Value, Value2>
258
+ ) => Either<Value2, Value>
259
259
  >(2, <Value, Value2, Patch, Patch2>(
260
260
  self: Differ.Or.Patch<Value, Value2, Patch, Patch2>,
261
261
  { left, oldValue, right }: {
262
- oldValue: Either<Value, Value2>
262
+ oldValue: Either<Value2, Value>
263
263
  left: Differ<Value, Patch>
264
264
  right: Differ<Value2, Patch2>
265
265
  }
@@ -86,11 +86,11 @@ export const hashSet = <Value>(): Differ.Differ<HashSet<Value>, Differ.Differ.Ha
86
86
  export const orElseEither = Dual.dual<
87
87
  <Value2, Patch2>(that: Differ.Differ<Value2, Patch2>) => <Value, Patch>(
88
88
  self: Differ.Differ<Value, Patch>
89
- ) => Differ.Differ<Either<Value, Value2>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>,
89
+ ) => Differ.Differ<Either<Value2, Value>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>,
90
90
  <Value, Patch, Value2, Patch2>(
91
91
  self: Differ.Differ<Value, Patch>,
92
92
  that: Differ.Differ<Value2, Patch2>
93
- ) => Differ.Differ<Either<Value, Value2>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>
93
+ ) => Differ.Differ<Either<Value2, Value>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>
94
94
  >(2, (self, that) =>
95
95
  make({
96
96
  empty: OrPatch.empty(),
@@ -2,7 +2,6 @@ import type * as Cause from "../../Cause.js"
2
2
  import type * as Deferred from "../../Deferred.js"
3
3
  import * as Duration from "../../Duration.js"
4
4
  import type * as Effect from "../../Effect.js"
5
- import * as Either from "../../Either.js"
6
5
  import * as Equal from "../../Equal.js"
7
6
  import type { Equivalence } from "../../Equivalence.js"
8
7
  import * as Exit from "../../Exit.js"
@@ -45,7 +44,7 @@ class Semaphore {
45
44
  }
46
45
 
47
46
  readonly take = (n: number): Effect.Effect<number> =>
48
- core.asyncEither<number>((resume) => {
47
+ core.async<number>((resume) => {
49
48
  if (this.free < n) {
50
49
  const observer = () => {
51
50
  if (this.free < n) {
@@ -56,12 +55,12 @@ class Semaphore {
56
55
  resume(core.succeed(n))
57
56
  }
58
57
  this.waiters.add(observer)
59
- return Either.left(core.sync(() => {
58
+ return core.sync(() => {
60
59
  this.waiters.delete(observer)
61
- }))
60
+ })
62
61
  }
63
62
  this.taken += n
64
- return Either.right(core.succeed(n))
63
+ return resume(core.succeed(n))
65
64
  })
66
65
 
67
66
  readonly updateTaken = (f: (n: number) => number): Effect.Effect<number> =>
@@ -84,7 +83,7 @@ class Semaphore {
84
83
 
85
84
  readonly releaseAll: Effect.Effect<number> = this.updateTaken((_) => 0)
86
85
 
87
- readonly withPermits = (n: number) => <R, E, A>(self: Effect.Effect<R, E, A>) =>
86
+ readonly withPermits = (n: number) => <A, E, R>(self: Effect.Effect<A, E, R>) =>
88
87
  core.uninterruptibleMask((restore) =>
89
88
  core.flatMap(
90
89
  restore(this.take(n)),
@@ -376,14 +375,14 @@ export const raceFirst = dual<
376
375
 
377
376
  /** @internal */
378
377
  export const scheduleForked = dual<
379
- <R2, Out>(
380
- schedule: Schedule.Schedule<R2, unknown, Out>
378
+ <Out, R2>(
379
+ schedule: Schedule.Schedule<Out, unknown, R2>
381
380
  ) => <A, E, R>(
382
381
  self: Effect.Effect<A, E, R>
383
382
  ) => Effect.Effect<Fiber.RuntimeFiber<Out, E>, never, R | R2 | Scope.Scope>,
384
- <A, E, R, R2, Out>(
383
+ <A, E, R, Out, R2>(
385
384
  self: Effect.Effect<A, E, R>,
386
- schedule: Schedule.Schedule<R2, unknown, Out>
385
+ schedule: Schedule.Schedule<Out, unknown, R2>
387
386
  ) => Effect.Effect<Fiber.RuntimeFiber<Out, E>, never, R | R2 | Scope.Scope>
388
387
  >(2, (self, schedule) => pipe(self, _schedule.schedule_Effect(schedule), forkScoped))
389
388
 
@@ -20,12 +20,12 @@ export const TypeId: Either.TypeId = Symbol.for("effect/Either") as Either.TypeI
20
20
  const CommonProto = {
21
21
  ...EffectPrototype,
22
22
  [TypeId]: {
23
- _A: (_: never) => _
23
+ _R: (_: never) => _
24
24
  },
25
- [NodeInspectSymbol]<E, A>(this: Either.Either<E, A>) {
25
+ [NodeInspectSymbol]<L, R>(this: Either.Either<R, L>) {
26
26
  return this.toJSON()
27
27
  },
28
- toString<E, A>(this: Either.Left<E, A>) {
28
+ toString<L, R>(this: Either.Left<L, R>) {
29
29
  return format(this.toJSON())
30
30
  }
31
31
  }
@@ -33,13 +33,13 @@ const CommonProto = {
33
33
  const RightProto = Object.assign(Object.create(CommonProto), {
34
34
  _tag: "Right",
35
35
  _op: "Right",
36
- [Equal.symbol]<E, A>(this: Either.Right<E, A>, that: unknown): boolean {
36
+ [Equal.symbol]<L, R>(this: Either.Right<L, R>, that: unknown): boolean {
37
37
  return isEither(that) && isRight(that) && Equal.equals(that.right, this.right)
38
38
  },
39
- [Hash.symbol]<E, A>(this: Either.Right<E, A>) {
40
- return Hash.cached(this, Hash.combine(Hash.hash(this._tag))(Hash.hash(this.right)))
39
+ [Hash.symbol]<L, R>(this: Either.Right<L, R>) {
40
+ return Hash.combine(Hash.hash(this._tag))(Hash.hash(this.right))
41
41
  },
42
- toJSON<E, A>(this: Either.Right<E, A>) {
42
+ toJSON<L, R>(this: Either.Right<L, R>) {
43
43
  return {
44
44
  _id: "Either",
45
45
  _tag: this._tag,
@@ -51,11 +51,11 @@ const RightProto = Object.assign(Object.create(CommonProto), {
51
51
  const LeftProto = Object.assign(Object.create(CommonProto), {
52
52
  _tag: "Left",
53
53
  _op: "Left",
54
- [Equal.symbol]<E, A>(this: Either.Left<E, A>, that: unknown): boolean {
54
+ [Equal.symbol]<L, R>(this: Either.Left<L, R>, that: unknown): boolean {
55
55
  return isEither(that) && isLeft(that) && Equal.equals(that.left, this.left)
56
56
  },
57
- [Hash.symbol]<E, A>(this: Either.Left<E, A>) {
58
- return Hash.cached(this, Hash.combine(Hash.hash(this._tag))(Hash.hash(this.left)))
57
+ [Hash.symbol]<L, R>(this: Either.Left<L, R>) {
58
+ return Hash.combine(Hash.hash(this._tag))(Hash.hash(this.left))
59
59
  },
60
60
  toJSON<E, A>(this: Either.Left<E, A>) {
61
61
  return {
@@ -70,38 +70,41 @@ const LeftProto = Object.assign(Object.create(CommonProto), {
70
70
  export const isEither = (input: unknown): input is Either.Either<unknown, unknown> => hasProperty(input, TypeId)
71
71
 
72
72
  /** @internal */
73
- export const isLeft = <E, A>(ma: Either.Either<E, A>): ma is Either.Left<E, A> => ma._tag === "Left"
73
+ export const isLeft = <R, L>(ma: Either.Either<R, L>): ma is Either.Left<L, R> => ma._tag === "Left"
74
74
 
75
75
  /** @internal */
76
- export const isRight = <E, A>(ma: Either.Either<E, A>): ma is Either.Right<E, A> => ma._tag === "Right"
76
+ export const isRight = <R, L>(ma: Either.Either<R, L>): ma is Either.Right<L, R> => ma._tag === "Right"
77
77
 
78
78
  /** @internal */
79
- export const left = <E>(left: E): Either.Either<E, never> => {
79
+ export const left = <L>(left: L): Either.Either<never, L> => {
80
80
  const a = Object.create(LeftProto)
81
81
  a.left = left
82
82
  return a
83
83
  }
84
84
 
85
85
  /** @internal */
86
- export const right = <A>(right: A): Either.Either<never, A> => {
86
+ export const right = <R>(right: R): Either.Either<R> => {
87
87
  const a = Object.create(RightProto)
88
88
  a.right = right
89
89
  return a
90
90
  }
91
91
 
92
92
  /** @internal */
93
- export const getLeft = <E, A>(
94
- self: Either.Either<E, A>
95
- ): Option<E> => (isRight(self) ? option.none : option.some(self.left))
93
+ export const getLeft = <R, L>(
94
+ self: Either.Either<R, L>
95
+ ): Option<L> => (isRight(self) ? option.none : option.some(self.left))
96
96
 
97
97
  /** @internal */
98
- export const getRight = <E, A>(
99
- self: Either.Either<E, A>
100
- ): Option<A> => (isLeft(self) ? option.none : option.some(self.right))
98
+ export const getRight = <R, L>(
99
+ self: Either.Either<R, L>
100
+ ): Option<R> => (isLeft(self) ? option.none : option.some(self.right))
101
101
 
102
102
  /** @internal */
103
- export const fromOption = dual(
103
+ export const fromOption: {
104
+ <L>(onNone: () => L): <R>(self: Option<R>) => Either.Either<R, L>
105
+ <R, L>(self: Option<R>, onNone: () => L): Either.Either<R, L>
106
+ } = dual(
104
107
  2,
105
- <A, E>(self: Option<A>, onNone: () => E): Either.Either<E, A> =>
108
+ <R, L>(self: Option<R>, onNone: () => L): Either.Either<R, L> =>
106
109
  option.isNone(self) ? left(onNone()) : right(self.value)
107
110
  )
@@ -35,7 +35,7 @@ export const encode = (bytes: Uint8Array) => {
35
35
  }
36
36
 
37
37
  /** @internal */
38
- export const decode = (str: string): Either.Either<Encoding.DecodeException, Uint8Array> => {
38
+ export const decode = (str: string): Either.Either<Uint8Array, Encoding.DecodeException> => {
39
39
  const length = str.length
40
40
  if (length % 4 !== 0) {
41
41
  return Either.left(
@@ -8,7 +8,7 @@ export const encode = (data: Uint8Array) =>
8
8
  Base64.encode(data).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_")
9
9
 
10
10
  /** @internal */
11
- export const decode = (str: string): Either.Either<Encoding.DecodeException, Uint8Array> => {
11
+ export const decode = (str: string): Either.Either<Uint8Array, Encoding.DecodeException> => {
12
12
  const length = str.length
13
13
  if (length % 4 === 1) {
14
14
  return Either.left(
@@ -13,7 +13,7 @@ export const encode = (bytes: Uint8Array) => {
13
13
  }
14
14
 
15
15
  /** @internal */
16
- export const decode = (str: string): Either.Either<Encoding.DecodeException, Uint8Array> => {
16
+ export const decode = (str: string): Either.Either<Uint8Array, Encoding.DecodeException> => {
17
17
  const bytes = new TextEncoder().encode(str)
18
18
  if (bytes.length % 2 !== 0) {
19
19
  return Either.left(DecodeException(str, `Length must be a multiple of 2, but is ${bytes.length}`))
@@ -260,8 +260,8 @@ export const orElse = dual<
260
260
 
261
261
  /** @internal */
262
262
  export const orElseEither = dual<
263
- <A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<Either.Either<A, A2>, E | E2>,
264
- <A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<Either.Either<A, A2>, E | E2>
263
+ <A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<Either.Either<A2, A>, E | E2>,
264
+ <A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<Either.Either<A2, A>, E | E2>
265
265
  >(2, (self, that) => orElse(map(self, Either.left), map(that, Either.right)))
266
266
 
267
267
  /** @internal */
@@ -1915,9 +1915,9 @@ export const forEachParUnbounded = <A, B, E, R>(
1915
1915
  })
1916
1916
 
1917
1917
  /** @internal */
1918
- export const forEachConcurrentDiscard = <A, _, E, R>(
1918
+ export const forEachConcurrentDiscard = <A, X, E, R>(
1919
1919
  self: Iterable<A>,
1920
- f: (a: A, i: number) => Effect.Effect<_, E, R>,
1920
+ f: (a: A, i: number) => Effect.Effect<X, E, R>,
1921
1921
  batching: boolean,
1922
1922
  processAll: boolean,
1923
1923
  n?: number
@@ -1933,7 +1933,7 @@ export const forEachConcurrentDiscard = <A, _, E, R>(
1933
1933
  let counter = 0
1934
1934
  let interrupted = false
1935
1935
  const fibersCount = n ? Math.min(todos.length, n) : todos.length
1936
- const fibers = new Set<FiberRuntime<Exit.Exit<_, E> | Effect.Blocked<_, E>>>()
1936
+ const fibers = new Set<FiberRuntime<Exit.Exit<X, E> | Effect.Blocked<X, E>>>()
1937
1937
  const results = new Array()
1938
1938
  const interruptAll = () =>
1939
1939
  fibers.forEach((fiber) => {
@@ -1941,8 +1941,8 @@ export const forEachConcurrentDiscard = <A, _, E, R>(
1941
1941
  fiber.unsafeInterruptAsFork(parent.id())
1942
1942
  }, 0)
1943
1943
  })
1944
- const startOrder = new Array<FiberRuntime<Exit.Exit<_, E> | Effect.Blocked<_, E>>>()
1945
- const joinOrder = new Array<FiberRuntime<Exit.Exit<_, E> | Effect.Blocked<_, E>>>()
1944
+ const startOrder = new Array<FiberRuntime<Exit.Exit<X, E> | Effect.Blocked<X, E>>>()
1945
+ const joinOrder = new Array<FiberRuntime<Exit.Exit<X, E> | Effect.Blocked<X, E>>>()
1946
1946
  const residual = new Array<core.Blocked>()
1947
1947
  const collectExits = () => {
1948
1948
  const exits: Array<Exit.Exit<any, E>> = results
@@ -1978,7 +1978,7 @@ export const forEachConcurrentDiscard = <A, _, E, R>(
1978
1978
  const stepOrExit = batching ? core.step : core.exit
1979
1979
  const processingFiber = runFiber(
1980
1980
  core.async<any, any, any>((resume) => {
1981
- const pushResult = <_, E>(res: Exit.Exit<_, E> | Effect.Blocked<_, E>, index: number) => {
1981
+ const pushResult = <X, E>(res: Exit.Exit<X, E> | Effect.Blocked<X, E>, index: number) => {
1982
1982
  if (res._op === "Blocked") {
1983
1983
  residual.push(res as core.Blocked)
1984
1984
  } else {
@@ -2002,8 +2002,8 @@ export const forEachConcurrentDiscard = <A, _, E, R>(
2002
2002
  ))
2003
2003
  }
2004
2004
  const onRes = (
2005
- res: Exit.Exit<_, E> | Effect.Blocked<_, E>
2006
- ): Effect.Effect<Exit.Exit<_, E> | Effect.Blocked<_, E>, never, R> => {
2005
+ res: Exit.Exit<X, E> | Effect.Blocked<X, E>
2006
+ ): Effect.Effect<Exit.Exit<X, E> | Effect.Blocked<X, E>, never, R> => {
2007
2007
  if (todos.length > 0) {
2008
2008
  pushResult(res, index)
2009
2009
  if (todos.length > 0) {
@@ -3315,7 +3315,7 @@ export const raceFibersWith = dual<
3315
3315
  }, FiberId.combine(leftFiber.id(), rightFiber.id()))
3316
3316
  }))
3317
3317
 
3318
- const completeRace = <R, R1, R2, E2, A2, R3, E3, A3>(
3318
+ const completeRace = <A2, A3, E2, E3, R, R1, R2, R3>(
3319
3319
  winner: Fiber.RuntimeFiber<any, any>,
3320
3320
  loser: Fiber.RuntimeFiber<any, any>,
3321
3321
  cont: (winner: Fiber.RuntimeFiber<any, any>, loser: Fiber.RuntimeFiber<any, any>) => Effect.Effect<any, any, any>,