effect 2.2.5 → 2.3.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 (693) hide show
  1. package/RateLimiter/package.json +6 -0
  2. package/dist/cjs/Cause.js +14 -1
  3. package/dist/cjs/Cause.js.map +1 -1
  4. package/dist/cjs/Channel.js.map +1 -1
  5. package/dist/cjs/Clock.js.map +1 -1
  6. package/dist/cjs/Console.js.map +1 -1
  7. package/dist/cjs/Context.js +23 -25
  8. package/dist/cjs/Context.js.map +1 -1
  9. package/dist/cjs/Data.js +3 -3
  10. package/dist/cjs/Data.js.map +1 -1
  11. package/dist/cjs/Deferred.js +1 -1
  12. package/dist/cjs/Deferred.js.map +1 -1
  13. package/dist/cjs/Effect.js +9 -9
  14. package/dist/cjs/Effect.js.map +1 -1
  15. package/dist/cjs/Effectable.js.map +1 -1
  16. package/dist/cjs/Either.js.map +1 -1
  17. package/dist/cjs/Exit.js +2 -2
  18. package/dist/cjs/Exit.js.map +1 -1
  19. package/dist/cjs/Fiber.js.map +1 -1
  20. package/dist/cjs/FiberMap.js +3 -3
  21. package/dist/cjs/FiberRef.js.map +1 -1
  22. package/dist/cjs/FiberRefs.js.map +1 -1
  23. package/dist/cjs/FiberSet.js +3 -3
  24. package/dist/cjs/FiberSet.js.map +1 -1
  25. package/dist/cjs/GroupBy.js.map +1 -1
  26. package/dist/cjs/Layer.js.map +1 -1
  27. package/dist/cjs/LogLevel.js.map +1 -1
  28. package/dist/cjs/Logger.js.map +1 -1
  29. package/dist/cjs/Metric.js.map +1 -1
  30. package/dist/cjs/Number.js +20 -1
  31. package/dist/cjs/Number.js.map +1 -1
  32. package/dist/cjs/Option.js.map +1 -1
  33. package/dist/cjs/Pool.js.map +1 -1
  34. package/dist/cjs/PubSub.js.map +1 -1
  35. package/dist/cjs/Queue.js.map +1 -1
  36. package/dist/cjs/Random.js.map +1 -1
  37. package/dist/cjs/RateLimiter.js +38 -0
  38. package/dist/cjs/RateLimiter.js.map +1 -0
  39. package/dist/cjs/ReadonlyRecord.js +45 -9
  40. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  41. package/dist/cjs/Ref.js.map +1 -1
  42. package/dist/cjs/Request.js.map +1 -1
  43. package/dist/cjs/RequestResolver.js.map +1 -1
  44. package/dist/cjs/Resource.js.map +1 -1
  45. package/dist/cjs/Runtime.js +1 -4
  46. package/dist/cjs/Runtime.js.map +1 -1
  47. package/dist/cjs/RuntimeFlags.js.map +1 -1
  48. package/dist/cjs/STM.js.map +1 -1
  49. package/dist/cjs/Schedule.js.map +1 -1
  50. package/dist/cjs/Scope.js.map +1 -1
  51. package/dist/cjs/ScopedRef.js.map +1 -1
  52. package/dist/cjs/SingleProducerAsyncInput.js.map +1 -1
  53. package/dist/cjs/Sink.js.map +1 -1
  54. package/dist/cjs/Stream.js.map +1 -1
  55. package/dist/cjs/SubscriptionRef.js.map +1 -1
  56. package/dist/cjs/Supervisor.js.map +1 -1
  57. package/dist/cjs/SynchronizedRef.js.map +1 -1
  58. package/dist/cjs/TArray.js.map +1 -1
  59. package/dist/cjs/TDeferred.js.map +1 -1
  60. package/dist/cjs/TMap.js.map +1 -1
  61. package/dist/cjs/TPriorityQueue.js.map +1 -1
  62. package/dist/cjs/TPubSub.js.map +1 -1
  63. package/dist/cjs/TQueue.js.map +1 -1
  64. package/dist/cjs/TRandom.js.map +1 -1
  65. package/dist/cjs/TReentrantLock.js.map +1 -1
  66. package/dist/cjs/TRef.js.map +1 -1
  67. package/dist/cjs/TSemaphore.js.map +1 -1
  68. package/dist/cjs/TSet.js.map +1 -1
  69. package/dist/cjs/Take.js +6 -6
  70. package/dist/cjs/Take.js.map +1 -1
  71. package/dist/cjs/TestAnnotation.js +10 -13
  72. package/dist/cjs/TestAnnotation.js.map +1 -1
  73. package/dist/cjs/TestAnnotations.js +1 -1
  74. package/dist/cjs/TestAnnotations.js.map +1 -1
  75. package/dist/cjs/TestClock.js +1 -1
  76. package/dist/cjs/TestClock.js.map +1 -1
  77. package/dist/cjs/TestConfig.js +1 -1
  78. package/dist/cjs/TestConfig.js.map +1 -1
  79. package/dist/cjs/TestContext.js.map +1 -1
  80. package/dist/cjs/TestLive.js +1 -1
  81. package/dist/cjs/TestLive.js.map +1 -1
  82. package/dist/cjs/TestServices.js.map +1 -1
  83. package/dist/cjs/TestSized.js +1 -1
  84. package/dist/cjs/TestSized.js.map +1 -1
  85. package/dist/cjs/Utils.js +0 -1
  86. package/dist/cjs/Utils.js.map +1 -1
  87. package/dist/cjs/index.js +4 -2
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/internal/cache.js.map +1 -1
  90. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  91. package/dist/cjs/internal/channel/mergeDecision.js +2 -6
  92. package/dist/cjs/internal/channel/mergeDecision.js.map +1 -1
  93. package/dist/cjs/internal/channel/singleProducerAsyncInput.js.map +1 -1
  94. package/dist/cjs/internal/channel.js +1 -1
  95. package/dist/cjs/internal/channel.js.map +1 -1
  96. package/dist/cjs/internal/clock.js +1 -1
  97. package/dist/cjs/internal/clock.js.map +1 -1
  98. package/dist/cjs/internal/configProvider.js +2 -4
  99. package/dist/cjs/internal/configProvider.js.map +1 -1
  100. package/dist/cjs/internal/console.js.map +1 -1
  101. package/dist/cjs/internal/context.js +31 -22
  102. package/dist/cjs/internal/context.js.map +1 -1
  103. package/dist/cjs/internal/core-effect.js +13 -27
  104. package/dist/cjs/internal/core-effect.js.map +1 -1
  105. package/dist/cjs/internal/core-stream.js.map +1 -1
  106. package/dist/cjs/internal/core.js +61 -130
  107. package/dist/cjs/internal/core.js.map +1 -1
  108. package/dist/cjs/internal/data.js.map +1 -1
  109. package/dist/cjs/internal/defaultServices/console.js +1 -1
  110. package/dist/cjs/internal/defaultServices/console.js.map +1 -1
  111. package/dist/cjs/internal/defaultServices.js.map +1 -1
  112. package/dist/cjs/internal/deferred.js.map +1 -1
  113. package/dist/cjs/internal/differ/contextPatch.js +9 -9
  114. package/dist/cjs/internal/differ/contextPatch.js.map +1 -1
  115. package/dist/cjs/internal/effect/circular.js +7 -10
  116. package/dist/cjs/internal/effect/circular.js.map +1 -1
  117. package/dist/cjs/internal/effectable.js +4 -4
  118. package/dist/cjs/internal/effectable.js.map +1 -1
  119. package/dist/cjs/internal/fiber.js +2 -6
  120. package/dist/cjs/internal/fiber.js.map +1 -1
  121. package/dist/cjs/internal/fiberRuntime.js +10 -19
  122. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  123. package/dist/cjs/internal/groupBy.js.map +1 -1
  124. package/dist/cjs/internal/keyedPool.js.map +1 -1
  125. package/dist/cjs/internal/layer/circular.js.map +1 -1
  126. package/dist/cjs/internal/layer.js +3 -3
  127. package/dist/cjs/internal/layer.js.map +1 -1
  128. package/dist/cjs/internal/logSpan.js +3 -5
  129. package/dist/cjs/internal/logSpan.js.map +1 -1
  130. package/dist/cjs/internal/metric.js.map +1 -1
  131. package/dist/cjs/internal/pool.js.map +1 -1
  132. package/dist/cjs/internal/pubsub.js +2 -6
  133. package/dist/cjs/internal/pubsub.js.map +1 -1
  134. package/dist/cjs/internal/query.js.map +1 -1
  135. package/dist/cjs/internal/queue.js.map +1 -1
  136. package/dist/cjs/internal/random.js +1 -1
  137. package/dist/cjs/internal/random.js.map +1 -1
  138. package/dist/cjs/internal/rateLimiter.js +44 -0
  139. package/dist/cjs/internal/rateLimiter.js.map +1 -0
  140. package/dist/cjs/internal/ref.js.map +1 -1
  141. package/dist/cjs/internal/reloadable.js +1 -9
  142. package/dist/cjs/internal/reloadable.js.map +1 -1
  143. package/dist/cjs/internal/runtime.js +0 -1
  144. package/dist/cjs/internal/runtime.js.map +1 -1
  145. package/dist/cjs/internal/schedule.js.map +1 -1
  146. package/dist/cjs/internal/scopedCache.js.map +1 -1
  147. package/dist/cjs/internal/scopedRef.js.map +1 -1
  148. package/dist/cjs/internal/sink.js +7 -7
  149. package/dist/cjs/internal/sink.js.map +1 -1
  150. package/dist/cjs/internal/stm/core.js.map +1 -1
  151. package/dist/cjs/internal/stm/stm/stmState.js.map +1 -1
  152. package/dist/cjs/internal/stm/stm/tExit.js +2 -2
  153. package/dist/cjs/internal/stm/stm/tExit.js.map +1 -1
  154. package/dist/cjs/internal/stm/stm/tryCommit.js.map +1 -1
  155. package/dist/cjs/internal/stm/stm.js.map +1 -1
  156. package/dist/cjs/internal/stm/tArray.js.map +1 -1
  157. package/dist/cjs/internal/stm/tDeferred.js +4 -2
  158. package/dist/cjs/internal/stm/tDeferred.js.map +1 -1
  159. package/dist/cjs/internal/stm/tMap.js.map +1 -1
  160. package/dist/cjs/internal/stm/tPriorityQueue.js.map +1 -1
  161. package/dist/cjs/internal/stm/tPubSub.js.map +1 -1
  162. package/dist/cjs/internal/stm/tQueue.js.map +1 -1
  163. package/dist/cjs/internal/stm/tRandom.js +1 -1
  164. package/dist/cjs/internal/stm/tRandom.js.map +1 -1
  165. package/dist/cjs/internal/stm/tReentrantLock.js.map +1 -1
  166. package/dist/cjs/internal/stm/tRef.js.map +1 -1
  167. package/dist/cjs/internal/stm/tSemaphore.js.map +1 -1
  168. package/dist/cjs/internal/stm/tSet.js.map +1 -1
  169. package/dist/cjs/internal/stream/debounceState.js.map +1 -1
  170. package/dist/cjs/internal/stream/handoff.js.map +1 -1
  171. package/dist/cjs/internal/stream/handoffSignal.js.map +1 -1
  172. package/dist/cjs/internal/stream/pull.js.map +1 -1
  173. package/dist/cjs/internal/stream.js +0 -2
  174. package/dist/cjs/internal/stream.js.map +1 -1
  175. package/dist/cjs/internal/subscriptionRef.js.map +1 -1
  176. package/dist/cjs/internal/supervisor.js.map +1 -1
  177. package/dist/cjs/internal/take.js +2 -2
  178. package/dist/cjs/internal/take.js.map +1 -1
  179. package/dist/cjs/internal/testing/sleep.js.map +1 -1
  180. package/dist/cjs/internal/tracer.js +2 -2
  181. package/dist/cjs/internal/tracer.js.map +1 -1
  182. package/dist/cjs/internal/version.js +1 -1
  183. package/dist/dts/Cache.d.ts +20 -20
  184. package/dist/dts/Cache.d.ts.map +1 -1
  185. package/dist/dts/Cause.d.ts +33 -5
  186. package/dist/dts/Cause.d.ts.map +1 -1
  187. package/dist/dts/Channel.d.ts +197 -194
  188. package/dist/dts/Channel.d.ts.map +1 -1
  189. package/dist/dts/Clock.d.ts +7 -7
  190. package/dist/dts/Clock.d.ts.map +1 -1
  191. package/dist/dts/Config.d.ts +1 -1
  192. package/dist/dts/Config.d.ts.map +1 -1
  193. package/dist/dts/ConfigProvider.d.ts +6 -6
  194. package/dist/dts/ConfigProvider.d.ts.map +1 -1
  195. package/dist/dts/Console.d.ts +43 -43
  196. package/dist/dts/Console.d.ts.map +1 -1
  197. package/dist/dts/Context.d.ts +44 -29
  198. package/dist/dts/Context.d.ts.map +1 -1
  199. package/dist/dts/Data.d.ts +38 -57
  200. package/dist/dts/Data.d.ts.map +1 -1
  201. package/dist/dts/Deferred.d.ts +36 -36
  202. package/dist/dts/Deferred.d.ts.map +1 -1
  203. package/dist/dts/Effect.d.ts +732 -729
  204. package/dist/dts/Effect.d.ts.map +1 -1
  205. package/dist/dts/Effectable.d.ts +8 -8
  206. package/dist/dts/Effectable.d.ts.map +1 -1
  207. package/dist/dts/Either.d.ts +2 -3
  208. package/dist/dts/Either.d.ts.map +1 -1
  209. package/dist/dts/Exit.d.ts +74 -74
  210. package/dist/dts/Exit.d.ts.map +1 -1
  211. package/dist/dts/Fiber.d.ts +75 -75
  212. package/dist/dts/Fiber.d.ts.map +1 -1
  213. package/dist/dts/FiberMap.d.ts +22 -22
  214. package/dist/dts/FiberMap.d.ts.map +1 -1
  215. package/dist/dts/FiberRef.d.ts +28 -28
  216. package/dist/dts/FiberRef.d.ts.map +1 -1
  217. package/dist/dts/FiberRefs.d.ts +1 -1
  218. package/dist/dts/FiberRefs.d.ts.map +1 -1
  219. package/dist/dts/FiberSet.d.ts +16 -16
  220. package/dist/dts/FiberSet.d.ts.map +1 -1
  221. package/dist/dts/GroupBy.d.ts +6 -6
  222. package/dist/dts/GroupBy.d.ts.map +1 -1
  223. package/dist/dts/KeyedPool.d.ts +22 -22
  224. package/dist/dts/KeyedPool.d.ts.map +1 -1
  225. package/dist/dts/Layer.d.ts +126 -126
  226. package/dist/dts/Layer.d.ts.map +1 -1
  227. package/dist/dts/LogLevel.d.ts +2 -2
  228. package/dist/dts/LogLevel.d.ts.map +1 -1
  229. package/dist/dts/Logger.d.ts +14 -14
  230. package/dist/dts/Logger.d.ts.map +1 -1
  231. package/dist/dts/MergeDecision.d.ts +7 -7
  232. package/dist/dts/MergeState.d.ts +13 -13
  233. package/dist/dts/MergeState.d.ts.map +1 -1
  234. package/dist/dts/Metric.d.ts +32 -32
  235. package/dist/dts/Metric.d.ts.map +1 -1
  236. package/dist/dts/MetricPolling.d.ts +6 -6
  237. package/dist/dts/MetricPolling.d.ts.map +1 -1
  238. package/dist/dts/Number.d.ts +15 -0
  239. package/dist/dts/Number.d.ts.map +1 -1
  240. package/dist/dts/Option.d.ts +2 -3
  241. package/dist/dts/Option.d.ts.map +1 -1
  242. package/dist/dts/Pool.d.ts +15 -16
  243. package/dist/dts/Pool.d.ts.map +1 -1
  244. package/dist/dts/PubSub.d.ts +18 -18
  245. package/dist/dts/PubSub.d.ts.map +1 -1
  246. package/dist/dts/Queue.d.ts +40 -40
  247. package/dist/dts/Queue.d.ts.map +1 -1
  248. package/dist/dts/Random.d.ts +13 -13
  249. package/dist/dts/Random.d.ts.map +1 -1
  250. package/dist/dts/RateLimiter.d.ts +31 -0
  251. package/dist/dts/RateLimiter.d.ts.map +1 -0
  252. package/dist/dts/ReadonlyArray.d.ts +3 -3
  253. package/dist/dts/ReadonlyRecord.d.ts +37 -8
  254. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  255. package/dist/dts/Ref.d.ts +25 -25
  256. package/dist/dts/Ref.d.ts.map +1 -1
  257. package/dist/dts/Reloadable.d.ts +9 -9
  258. package/dist/dts/Reloadable.d.ts.map +1 -1
  259. package/dist/dts/Request.d.ts +27 -28
  260. package/dist/dts/Request.d.ts.map +1 -1
  261. package/dist/dts/RequestBlock.d.ts +3 -3
  262. package/dist/dts/RequestBlock.d.ts.map +1 -1
  263. package/dist/dts/RequestResolver.d.ts +16 -16
  264. package/dist/dts/RequestResolver.d.ts.map +1 -1
  265. package/dist/dts/Resource.d.ts +7 -7
  266. package/dist/dts/Resource.d.ts.map +1 -1
  267. package/dist/dts/Runtime.d.ts +13 -16
  268. package/dist/dts/Runtime.d.ts.map +1 -1
  269. package/dist/dts/RuntimeFlags.d.ts +10 -10
  270. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  271. package/dist/dts/STM.d.ts +303 -303
  272. package/dist/dts/STM.d.ts.map +1 -1
  273. package/dist/dts/Schedule.d.ts +19 -19
  274. package/dist/dts/Schedule.d.ts.map +1 -1
  275. package/dist/dts/Scope.d.ts +10 -10
  276. package/dist/dts/Scope.d.ts.map +1 -1
  277. package/dist/dts/ScopedCache.d.ts +14 -14
  278. package/dist/dts/ScopedCache.d.ts.map +1 -1
  279. package/dist/dts/ScopedRef.d.ts +5 -5
  280. package/dist/dts/ScopedRef.d.ts.map +1 -1
  281. package/dist/dts/SingleProducerAsyncInput.d.ts +8 -8
  282. package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -1
  283. package/dist/dts/Sink.d.ts +214 -205
  284. package/dist/dts/Sink.d.ts.map +1 -1
  285. package/dist/dts/Stream.d.ts +595 -592
  286. package/dist/dts/Stream.d.ts.map +1 -1
  287. package/dist/dts/StreamEmit.d.ts +5 -5
  288. package/dist/dts/StreamEmit.d.ts.map +1 -1
  289. package/dist/dts/Streamable.d.ts +2 -2
  290. package/dist/dts/Streamable.d.ts.map +1 -1
  291. package/dist/dts/SubscriptionRef.d.ts +41 -41
  292. package/dist/dts/SubscriptionRef.d.ts.map +1 -1
  293. package/dist/dts/Supervisor.d.ts +17 -17
  294. package/dist/dts/Supervisor.d.ts.map +1 -1
  295. package/dist/dts/SynchronizedRef.d.ts +41 -41
  296. package/dist/dts/SynchronizedRef.d.ts.map +1 -1
  297. package/dist/dts/TArray.d.ts +72 -72
  298. package/dist/dts/TArray.d.ts.map +1 -1
  299. package/dist/dts/TDeferred.d.ts +12 -12
  300. package/dist/dts/TDeferred.d.ts.map +1 -1
  301. package/dist/dts/TMap.d.ts +67 -67
  302. package/dist/dts/TMap.d.ts.map +1 -1
  303. package/dist/dts/TPriorityQueue.d.ts +23 -23
  304. package/dist/dts/TPriorityQueue.d.ts.map +1 -1
  305. package/dist/dts/TPubSub.d.ts +15 -15
  306. package/dist/dts/TPubSub.d.ts.map +1 -1
  307. package/dist/dts/TQueue.d.ts +40 -40
  308. package/dist/dts/TQueue.d.ts.map +1 -1
  309. package/dist/dts/TRandom.d.ts +13 -13
  310. package/dist/dts/TRandom.d.ts.map +1 -1
  311. package/dist/dts/TReentrantLock.d.ts +21 -21
  312. package/dist/dts/TReentrantLock.d.ts.map +1 -1
  313. package/dist/dts/TRef.d.ts +25 -25
  314. package/dist/dts/TRef.d.ts.map +1 -1
  315. package/dist/dts/TSemaphore.d.ts +15 -15
  316. package/dist/dts/TSemaphore.d.ts.map +1 -1
  317. package/dist/dts/TSet.d.ts +49 -49
  318. package/dist/dts/TSet.d.ts.map +1 -1
  319. package/dist/dts/Take.d.ts +41 -41
  320. package/dist/dts/Take.d.ts.map +1 -1
  321. package/dist/dts/TestAnnotation.d.ts +1 -3
  322. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  323. package/dist/dts/TestAnnotations.d.ts +3 -3
  324. package/dist/dts/TestAnnotations.d.ts.map +1 -1
  325. package/dist/dts/TestClock.d.ts +18 -18
  326. package/dist/dts/TestClock.d.ts.map +1 -1
  327. package/dist/dts/TestConfig.d.ts.map +1 -1
  328. package/dist/dts/TestContext.d.ts +2 -2
  329. package/dist/dts/TestContext.d.ts.map +1 -1
  330. package/dist/dts/TestLive.d.ts +1 -1
  331. package/dist/dts/TestLive.d.ts.map +1 -1
  332. package/dist/dts/TestServices.d.ts +31 -31
  333. package/dist/dts/TestServices.d.ts.map +1 -1
  334. package/dist/dts/TestSized.d.ts +2 -2
  335. package/dist/dts/TestSized.d.ts.map +1 -1
  336. package/dist/dts/Tracer.d.ts +1 -1
  337. package/dist/dts/Utils.d.ts.map +1 -1
  338. package/dist/dts/index.d.ts +12 -2
  339. package/dist/dts/index.d.ts.map +1 -1
  340. package/dist/dts/internal/channel/channelExecutor.d.ts +1 -1
  341. package/dist/dts/internal/channel/channelExecutor.d.ts.map +1 -1
  342. package/dist/dts/internal/core-stream.d.ts +1 -1
  343. package/dist/dts/internal/core-stream.d.ts.map +1 -1
  344. package/dist/dts/internal/rateLimiter.d.ts +2 -0
  345. package/dist/dts/internal/rateLimiter.d.ts.map +1 -0
  346. package/dist/dts/internal/stm/stm.d.ts +6 -6
  347. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  348. package/dist/dts/internal/version.d.ts +1 -1
  349. package/dist/esm/Cause.js +13 -0
  350. package/dist/esm/Cause.js.map +1 -1
  351. package/dist/esm/Channel.js.map +1 -1
  352. package/dist/esm/Clock.js.map +1 -1
  353. package/dist/esm/Console.js.map +1 -1
  354. package/dist/esm/Context.js +22 -24
  355. package/dist/esm/Context.js.map +1 -1
  356. package/dist/esm/Data.js +4 -5
  357. package/dist/esm/Data.js.map +1 -1
  358. package/dist/esm/Deferred.js +1 -1
  359. package/dist/esm/Deferred.js.map +1 -1
  360. package/dist/esm/Effect.js +9 -9
  361. package/dist/esm/Effect.js.map +1 -1
  362. package/dist/esm/Effectable.js.map +1 -1
  363. package/dist/esm/Either.js.map +1 -1
  364. package/dist/esm/Exit.js +2 -2
  365. package/dist/esm/Exit.js.map +1 -1
  366. package/dist/esm/Fiber.js.map +1 -1
  367. package/dist/esm/FiberMap.js +3 -3
  368. package/dist/esm/FiberRef.js.map +1 -1
  369. package/dist/esm/FiberRefs.js.map +1 -1
  370. package/dist/esm/FiberSet.js +3 -3
  371. package/dist/esm/FiberSet.js.map +1 -1
  372. package/dist/esm/GroupBy.js.map +1 -1
  373. package/dist/esm/Layer.js.map +1 -1
  374. package/dist/esm/LogLevel.js.map +1 -1
  375. package/dist/esm/Logger.js.map +1 -1
  376. package/dist/esm/Metric.js.map +1 -1
  377. package/dist/esm/Number.js +18 -0
  378. package/dist/esm/Number.js.map +1 -1
  379. package/dist/esm/Option.js.map +1 -1
  380. package/dist/esm/Pool.js.map +1 -1
  381. package/dist/esm/PubSub.js.map +1 -1
  382. package/dist/esm/Queue.js.map +1 -1
  383. package/dist/esm/Random.js.map +1 -1
  384. package/dist/esm/RateLimiter.js +7 -0
  385. package/dist/esm/RateLimiter.js.map +1 -0
  386. package/dist/esm/ReadonlyRecord.js +44 -8
  387. package/dist/esm/ReadonlyRecord.js.map +1 -1
  388. package/dist/esm/Ref.js.map +1 -1
  389. package/dist/esm/Request.js.map +1 -1
  390. package/dist/esm/RequestResolver.js.map +1 -1
  391. package/dist/esm/Resource.js.map +1 -1
  392. package/dist/esm/Runtime.js +1 -4
  393. package/dist/esm/Runtime.js.map +1 -1
  394. package/dist/esm/RuntimeFlags.js.map +1 -1
  395. package/dist/esm/STM.js.map +1 -1
  396. package/dist/esm/Schedule.js.map +1 -1
  397. package/dist/esm/Scope.js.map +1 -1
  398. package/dist/esm/ScopedRef.js.map +1 -1
  399. package/dist/esm/SingleProducerAsyncInput.js.map +1 -1
  400. package/dist/esm/Sink.js.map +1 -1
  401. package/dist/esm/Stream.js.map +1 -1
  402. package/dist/esm/SubscriptionRef.js.map +1 -1
  403. package/dist/esm/Supervisor.js.map +1 -1
  404. package/dist/esm/SynchronizedRef.js.map +1 -1
  405. package/dist/esm/TArray.js.map +1 -1
  406. package/dist/esm/TDeferred.js.map +1 -1
  407. package/dist/esm/TMap.js.map +1 -1
  408. package/dist/esm/TPriorityQueue.js.map +1 -1
  409. package/dist/esm/TPubSub.js.map +1 -1
  410. package/dist/esm/TQueue.js.map +1 -1
  411. package/dist/esm/TRandom.js.map +1 -1
  412. package/dist/esm/TReentrantLock.js.map +1 -1
  413. package/dist/esm/TRef.js.map +1 -1
  414. package/dist/esm/TSemaphore.js.map +1 -1
  415. package/dist/esm/TSet.js.map +1 -1
  416. package/dist/esm/Take.js +6 -6
  417. package/dist/esm/Take.js.map +1 -1
  418. package/dist/esm/TestAnnotation.js +10 -13
  419. package/dist/esm/TestAnnotation.js.map +1 -1
  420. package/dist/esm/TestAnnotations.js +1 -1
  421. package/dist/esm/TestAnnotations.js.map +1 -1
  422. package/dist/esm/TestClock.js +1 -1
  423. package/dist/esm/TestClock.js.map +1 -1
  424. package/dist/esm/TestConfig.js +1 -1
  425. package/dist/esm/TestConfig.js.map +1 -1
  426. package/dist/esm/TestContext.js.map +1 -1
  427. package/dist/esm/TestLive.js +1 -1
  428. package/dist/esm/TestLive.js.map +1 -1
  429. package/dist/esm/TestServices.js.map +1 -1
  430. package/dist/esm/TestSized.js +1 -1
  431. package/dist/esm/TestSized.js.map +1 -1
  432. package/dist/esm/Utils.js +1 -1
  433. package/dist/esm/Utils.js.map +1 -1
  434. package/dist/esm/index.js +12 -2
  435. package/dist/esm/index.js.map +1 -1
  436. package/dist/esm/internal/cache.js.map +1 -1
  437. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  438. package/dist/esm/internal/channel/mergeDecision.js +2 -6
  439. package/dist/esm/internal/channel/mergeDecision.js.map +1 -1
  440. package/dist/esm/internal/channel/singleProducerAsyncInput.js.map +1 -1
  441. package/dist/esm/internal/channel.js +1 -1
  442. package/dist/esm/internal/channel.js.map +1 -1
  443. package/dist/esm/internal/clock.js +1 -1
  444. package/dist/esm/internal/clock.js.map +1 -1
  445. package/dist/esm/internal/configProvider.js +2 -4
  446. package/dist/esm/internal/configProvider.js.map +1 -1
  447. package/dist/esm/internal/console.js.map +1 -1
  448. package/dist/esm/internal/context.js +28 -20
  449. package/dist/esm/internal/context.js.map +1 -1
  450. package/dist/esm/internal/core-effect.js +12 -26
  451. package/dist/esm/internal/core-effect.js.map +1 -1
  452. package/dist/esm/internal/core-stream.js.map +1 -1
  453. package/dist/esm/internal/core.js +57 -127
  454. package/dist/esm/internal/core.js.map +1 -1
  455. package/dist/esm/internal/data.js.map +1 -1
  456. package/dist/esm/internal/defaultServices/console.js +1 -1
  457. package/dist/esm/internal/defaultServices/console.js.map +1 -1
  458. package/dist/esm/internal/defaultServices.js.map +1 -1
  459. package/dist/esm/internal/deferred.js.map +1 -1
  460. package/dist/esm/internal/differ/contextPatch.js +9 -9
  461. package/dist/esm/internal/differ/contextPatch.js.map +1 -1
  462. package/dist/esm/internal/effect/circular.js +5 -8
  463. package/dist/esm/internal/effect/circular.js.map +1 -1
  464. package/dist/esm/internal/effectable.js +4 -4
  465. package/dist/esm/internal/effectable.js.map +1 -1
  466. package/dist/esm/internal/fiber.js +2 -6
  467. package/dist/esm/internal/fiber.js.map +1 -1
  468. package/dist/esm/internal/fiberRuntime.js +10 -19
  469. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  470. package/dist/esm/internal/groupBy.js.map +1 -1
  471. package/dist/esm/internal/keyedPool.js.map +1 -1
  472. package/dist/esm/internal/layer/circular.js.map +1 -1
  473. package/dist/esm/internal/layer.js +3 -3
  474. package/dist/esm/internal/layer.js.map +1 -1
  475. package/dist/esm/internal/logSpan.js +3 -5
  476. package/dist/esm/internal/logSpan.js.map +1 -1
  477. package/dist/esm/internal/metric.js.map +1 -1
  478. package/dist/esm/internal/pool.js.map +1 -1
  479. package/dist/esm/internal/pubsub.js +1 -5
  480. package/dist/esm/internal/pubsub.js.map +1 -1
  481. package/dist/esm/internal/query.js.map +1 -1
  482. package/dist/esm/internal/queue.js.map +1 -1
  483. package/dist/esm/internal/random.js +1 -1
  484. package/dist/esm/internal/random.js.map +1 -1
  485. package/dist/esm/internal/rateLimiter.js +12 -0
  486. package/dist/esm/internal/rateLimiter.js.map +1 -0
  487. package/dist/esm/internal/ref.js.map +1 -1
  488. package/dist/esm/internal/reloadable.js +1 -9
  489. package/dist/esm/internal/reloadable.js.map +1 -1
  490. package/dist/esm/internal/runtime.js +0 -1
  491. package/dist/esm/internal/runtime.js.map +1 -1
  492. package/dist/esm/internal/schedule.js.map +1 -1
  493. package/dist/esm/internal/scopedCache.js.map +1 -1
  494. package/dist/esm/internal/scopedRef.js.map +1 -1
  495. package/dist/esm/internal/sink.js +7 -7
  496. package/dist/esm/internal/sink.js.map +1 -1
  497. package/dist/esm/internal/stm/core.js.map +1 -1
  498. package/dist/esm/internal/stm/stm/stmState.js.map +1 -1
  499. package/dist/esm/internal/stm/stm/tExit.js +2 -2
  500. package/dist/esm/internal/stm/stm/tExit.js.map +1 -1
  501. package/dist/esm/internal/stm/stm/tryCommit.js.map +1 -1
  502. package/dist/esm/internal/stm/stm.js.map +1 -1
  503. package/dist/esm/internal/stm/tArray.js.map +1 -1
  504. package/dist/esm/internal/stm/tDeferred.js +4 -2
  505. package/dist/esm/internal/stm/tDeferred.js.map +1 -1
  506. package/dist/esm/internal/stm/tMap.js.map +1 -1
  507. package/dist/esm/internal/stm/tPriorityQueue.js.map +1 -1
  508. package/dist/esm/internal/stm/tPubSub.js.map +1 -1
  509. package/dist/esm/internal/stm/tQueue.js.map +1 -1
  510. package/dist/esm/internal/stm/tRandom.js +1 -1
  511. package/dist/esm/internal/stm/tRandom.js.map +1 -1
  512. package/dist/esm/internal/stm/tReentrantLock.js.map +1 -1
  513. package/dist/esm/internal/stm/tRef.js.map +1 -1
  514. package/dist/esm/internal/stm/tSemaphore.js.map +1 -1
  515. package/dist/esm/internal/stm/tSet.js.map +1 -1
  516. package/dist/esm/internal/stream/debounceState.js.map +1 -1
  517. package/dist/esm/internal/stream/handoff.js.map +1 -1
  518. package/dist/esm/internal/stream/handoffSignal.js.map +1 -1
  519. package/dist/esm/internal/stream/pull.js.map +1 -1
  520. package/dist/esm/internal/stream.js +0 -2
  521. package/dist/esm/internal/stream.js.map +1 -1
  522. package/dist/esm/internal/subscriptionRef.js.map +1 -1
  523. package/dist/esm/internal/supervisor.js.map +1 -1
  524. package/dist/esm/internal/take.js +2 -2
  525. package/dist/esm/internal/take.js.map +1 -1
  526. package/dist/esm/internal/testing/sleep.js.map +1 -1
  527. package/dist/esm/internal/tracer.js +2 -2
  528. package/dist/esm/internal/tracer.js.map +1 -1
  529. package/dist/esm/internal/version.js +1 -1
  530. package/package.json +9 -1
  531. package/src/Cache.ts +20 -20
  532. package/src/Cause.ts +37 -13
  533. package/src/Channel.ts +802 -794
  534. package/src/Clock.ts +7 -7
  535. package/src/Config.ts +1 -1
  536. package/src/ConfigProvider.ts +6 -6
  537. package/src/Console.ts +44 -48
  538. package/src/Context.ts +52 -30
  539. package/src/Data.ts +38 -61
  540. package/src/Deferred.ts +39 -41
  541. package/src/Effect.ts +1187 -1206
  542. package/src/Effectable.ts +8 -8
  543. package/src/Either.ts +2 -3
  544. package/src/Exit.ts +88 -105
  545. package/src/Fiber.ts +77 -83
  546. package/src/FiberMap.ts +77 -77
  547. package/src/FiberRef.ts +28 -28
  548. package/src/FiberRefs.ts +1 -1
  549. package/src/FiberSet.ts +61 -62
  550. package/src/GroupBy.ts +8 -12
  551. package/src/KeyedPool.ts +22 -22
  552. package/src/Layer.ts +187 -181
  553. package/src/LogLevel.ts +7 -6
  554. package/src/Logger.ts +18 -18
  555. package/src/MergeDecision.ts +7 -7
  556. package/src/MergeState.ts +16 -16
  557. package/src/Metric.ts +39 -39
  558. package/src/MetricPolling.ts +6 -6
  559. package/src/Number.ts +19 -0
  560. package/src/Option.ts +2 -3
  561. package/src/Pool.ts +15 -16
  562. package/src/PubSub.ts +18 -18
  563. package/src/Queue.ts +43 -46
  564. package/src/Random.ts +13 -15
  565. package/src/RateLimiter.ts +37 -0
  566. package/src/ReadonlyRecord.ts +49 -8
  567. package/src/Ref.ts +25 -25
  568. package/src/Reloadable.ts +10 -10
  569. package/src/Request.ts +31 -31
  570. package/src/RequestBlock.ts +3 -3
  571. package/src/RequestResolver.ts +21 -21
  572. package/src/Resource.ts +13 -13
  573. package/src/Runtime.ts +16 -19
  574. package/src/RuntimeFlags.ts +10 -10
  575. package/src/STM.ts +361 -362
  576. package/src/Schedule.ts +19 -19
  577. package/src/Scheduler.ts +2 -2
  578. package/src/Scope.ts +14 -15
  579. package/src/ScopedCache.ts +14 -14
  580. package/src/ScopedRef.ts +7 -7
  581. package/src/SingleProducerAsyncInput.ts +8 -9
  582. package/src/Sink.ts +357 -381
  583. package/src/Stream.ts +935 -1033
  584. package/src/StreamEmit.ts +5 -5
  585. package/src/Streamable.ts +2 -2
  586. package/src/SubscriptionRef.ts +51 -51
  587. package/src/Supervisor.ts +26 -26
  588. package/src/SynchronizedRef.ts +44 -44
  589. package/src/TArray.ts +74 -74
  590. package/src/TDeferred.ts +14 -14
  591. package/src/TMap.ts +72 -72
  592. package/src/TPriorityQueue.ts +23 -24
  593. package/src/TPubSub.ts +15 -15
  594. package/src/TQueue.ts +40 -40
  595. package/src/TRandom.ts +13 -13
  596. package/src/TReentrantLock.ts +21 -21
  597. package/src/TRef.ts +25 -25
  598. package/src/TSemaphore.ts +15 -15
  599. package/src/TSet.ts +49 -49
  600. package/src/Take.ts +51 -51
  601. package/src/TestAnnotation.ts +6 -17
  602. package/src/TestAnnotations.ts +7 -9
  603. package/src/TestClock.ts +39 -45
  604. package/src/TestConfig.ts +1 -3
  605. package/src/TestContext.ts +3 -3
  606. package/src/TestLive.ts +3 -5
  607. package/src/TestServices.ts +45 -47
  608. package/src/TestSized.ts +5 -5
  609. package/src/Tracer.ts +1 -1
  610. package/src/Utils.ts +8 -10
  611. package/src/index.ts +13 -2
  612. package/src/internal/blockedRequests.ts +2 -2
  613. package/src/internal/cache.ts +38 -38
  614. package/src/internal/channel/channelExecutor.ts +65 -73
  615. package/src/internal/channel/channelState.ts +11 -11
  616. package/src/internal/channel/continuation.ts +10 -10
  617. package/src/internal/channel/mergeDecision.ts +14 -16
  618. package/src/internal/channel/mergeState.ts +12 -12
  619. package/src/internal/channel/singleProducerAsyncInput.ts +15 -17
  620. package/src/internal/channel/subexecutor.ts +7 -7
  621. package/src/internal/channel.ts +901 -980
  622. package/src/internal/clock.ts +6 -6
  623. package/src/internal/concurrency.ts +9 -9
  624. package/src/internal/configProvider.ts +29 -36
  625. package/src/internal/console.ts +12 -12
  626. package/src/internal/context.ts +32 -23
  627. package/src/internal/core-effect.ts +655 -616
  628. package/src/internal/core-stream.ts +317 -325
  629. package/src/internal/core.ts +856 -790
  630. package/src/internal/data.ts +2 -3
  631. package/src/internal/dataSource.ts +14 -14
  632. package/src/internal/defaultServices/console.ts +3 -1
  633. package/src/internal/defaultServices.ts +21 -21
  634. package/src/internal/deferred.ts +9 -9
  635. package/src/internal/differ/contextPatch.ts +17 -17
  636. package/src/internal/effect/circular.ts +154 -159
  637. package/src/internal/effectable.ts +7 -7
  638. package/src/internal/fiber.ts +55 -59
  639. package/src/internal/fiberRefs.ts +1 -1
  640. package/src/internal/fiberRuntime.ts +426 -463
  641. package/src/internal/groupBy.ts +59 -62
  642. package/src/internal/keyedPool.ts +37 -37
  643. package/src/internal/layer/circular.ts +37 -37
  644. package/src/internal/layer.ts +235 -240
  645. package/src/internal/logSpan.ts +3 -5
  646. package/src/internal/metric/polling.ts +5 -5
  647. package/src/internal/metric.ts +54 -55
  648. package/src/internal/pool.ts +72 -72
  649. package/src/internal/pubsub.ts +75 -84
  650. package/src/internal/query.ts +25 -27
  651. package/src/internal/queue.ts +65 -70
  652. package/src/internal/random.ts +9 -9
  653. package/src/internal/rateLimiter.ts +30 -0
  654. package/src/internal/ref.ts +24 -24
  655. package/src/internal/reloadable.ts +11 -31
  656. package/src/internal/request.ts +14 -14
  657. package/src/internal/resource.ts +8 -8
  658. package/src/internal/runtime.ts +21 -22
  659. package/src/internal/schedule.ts +131 -134
  660. package/src/internal/scopedCache.ts +35 -32
  661. package/src/internal/scopedRef.ts +14 -14
  662. package/src/internal/sink.ts +507 -565
  663. package/src/internal/stm/core.ts +101 -102
  664. package/src/internal/stm/stm/stmState.ts +10 -10
  665. package/src/internal/stm/stm/tExit.ts +18 -18
  666. package/src/internal/stm/stm/tryCommit.ts +5 -5
  667. package/src/internal/stm/stm.ts +363 -374
  668. package/src/internal/stm/tArray.ts +92 -92
  669. package/src/internal/stm/tDeferred.ts +16 -14
  670. package/src/internal/stm/tMap.ts +83 -84
  671. package/src/internal/stm/tPriorityQueue.ts +24 -25
  672. package/src/internal/stm/tPubSub.ts +37 -38
  673. package/src/internal/stm/tQueue.ts +44 -48
  674. package/src/internal/stm/tRandom.ts +18 -18
  675. package/src/internal/stm/tReentrantLock.ts +28 -28
  676. package/src/internal/stm/tRef.ts +25 -25
  677. package/src/internal/stm/tSemaphore.ts +16 -16
  678. package/src/internal/stm/tSet.ts +51 -52
  679. package/src/internal/stream/debounceState.ts +7 -7
  680. package/src/internal/stream/emit.ts +4 -4
  681. package/src/internal/stream/handoff.ts +19 -19
  682. package/src/internal/stream/handoffSignal.ts +4 -4
  683. package/src/internal/stream/pull.ts +10 -11
  684. package/src/internal/stream.ts +1770 -1788
  685. package/src/internal/subscriptionRef.ts +17 -17
  686. package/src/internal/supervisor.ts +49 -56
  687. package/src/internal/synchronizedRef.ts +27 -27
  688. package/src/internal/take.ts +61 -61
  689. package/src/internal/testing/sleep.ts +2 -2
  690. package/src/internal/testing/suspendedWarningData.ts +2 -2
  691. package/src/internal/testing/warningData.ts +2 -2
  692. package/src/internal/tracer.ts +2 -6
  693. package/src/internal/version.ts +1 -1
@@ -38,7 +38,7 @@ import { currentScheduler, type Scheduler } from "../Scheduler.js"
38
38
  import type * as Scope from "../Scope.js"
39
39
  import type * as Supervisor from "../Supervisor.js"
40
40
  import type * as Tracer from "../Tracer.js"
41
- import type { Concurrency } from "../Types.js"
41
+ import type { Concurrency, NoInfer } from "../Types.js"
42
42
  import * as _RequestBlock from "./blockedRequests.js"
43
43
  import * as internalCause from "./cause.js"
44
44
  import * as clock from "./clock.js"
@@ -254,7 +254,7 @@ export interface Snapshot {
254
254
  }
255
255
 
256
256
  /** @internal */
257
- export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A> {
257
+ export class FiberRuntime<in out A, in out E = never> implements Fiber.RuntimeFiber<A, E> {
258
258
  readonly [internalFiber.FiberTypeId] = internalFiber.fiberVariance
259
259
  readonly [internalFiber.RuntimeFiberTypeId] = runtimeFiberVariance
260
260
 
@@ -268,12 +268,12 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
268
268
 
269
269
  private _queue = new Array<FiberMessage.FiberMessage>()
270
270
  private _children: Set<FiberRuntime<any, any>> | null = null
271
- private _observers = new Array<(exit: Exit.Exit<E, A>) => void>()
271
+ private _observers = new Array<(exit: Exit.Exit<A, E>) => void>()
272
272
  private _running = false
273
273
  private _stack: Array<core.Continuation> = []
274
274
  private _asyncInterruptor: ((effect: Effect.Effect<any, any, any>) => any) | null = null
275
275
  private _asyncBlockingOn: FiberId.FiberId | null = null
276
- private _exitValue: Exit.Exit<E, A> | null = null
276
+ private _exitValue: Exit.Exit<A, E> | null = null
277
277
  private _steps: Array<Snapshot> = []
278
278
  public _supervisor: Supervisor.Supervisor<any>
279
279
  public _scheduler: Scheduler
@@ -311,21 +311,21 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
311
311
  * background. This can be called to "kick off" execution of a fiber after
312
312
  * it has been created.
313
313
  */
314
- resume<E, A>(effect: Effect.Effect<any, E, A>): void {
314
+ resume<A, E>(effect: Effect.Effect<A, E, any>): void {
315
315
  this.tell(FiberMessage.resume(effect))
316
316
  }
317
317
 
318
318
  /**
319
319
  * The status of the fiber.
320
320
  */
321
- get status(): Effect.Effect<never, never, FiberStatus.FiberStatus> {
321
+ get status(): Effect.Effect<FiberStatus.FiberStatus> {
322
322
  return this.ask((_, status) => status)
323
323
  }
324
324
 
325
325
  /**
326
326
  * Gets the fiber runtime flags.
327
327
  */
328
- get runtimeFlags(): Effect.Effect<never, never, RuntimeFlags.RuntimeFlags> {
328
+ get runtimeFlags(): Effect.Effect<RuntimeFlags.RuntimeFlags> {
329
329
  return this.ask((state, status) => {
330
330
  if (FiberStatus.isDone(status)) {
331
331
  return state._runtimeFlags
@@ -344,7 +344,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
344
344
  /**
345
345
  * Retrieves the immediate children of the fiber.
346
346
  */
347
- get children(): Effect.Effect<never, never, Array<Fiber.RuntimeFiber<any, any>>> {
347
+ get children(): Effect.Effect<Array<Fiber.RuntimeFiber<any, any>>> {
348
348
  return this.ask((fiber) => Array.from(fiber.getChildren()))
349
349
  }
350
350
 
@@ -373,7 +373,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
373
373
  /**
374
374
  * Retrieves the whole set of fiber refs.
375
375
  */
376
- fiberRefs(): Effect.Effect<never, never, FiberRefs.FiberRefs> {
376
+ fiberRefs(): Effect.Effect<FiberRefs.FiberRefs> {
377
377
  return this.ask((fiber) => fiber.getFiberRefs())
378
378
  }
379
379
 
@@ -386,9 +386,9 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
386
386
  */
387
387
  ask<Z>(
388
388
  f: (runtime: FiberRuntime<any, any>, status: FiberStatus.FiberStatus) => Z
389
- ): Effect.Effect<never, never, Z> {
389
+ ): Effect.Effect<Z> {
390
390
  return core.suspend(() => {
391
- const deferred = core.deferredUnsafeMake<never, Z>(this._fiberId)
391
+ const deferred = core.deferredUnsafeMake<Z>(this._fiberId)
392
392
  this.tell(
393
393
  FiberMessage.stateful((fiber, status) => {
394
394
  core.deferredUnsafeDone(deferred, core.sync(() => f(fiber, status)))
@@ -409,9 +409,9 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
409
409
  }
410
410
  }
411
411
 
412
- get await(): Effect.Effect<never, never, Exit.Exit<E, A>> {
413
- return core.async<never, never, Exit.Exit<E, A>>((resume) => {
414
- const cb = (exit: Exit.Exit<E, A>) => resume(core.succeed(exit))
412
+ get await(): Effect.Effect<Exit.Exit<A, E>> {
413
+ return core.async((resume) => {
414
+ const cb = (exit: Exit.Exit<A, E>) => resume(core.succeed(exit))
415
415
  this.tell(
416
416
  FiberMessage.stateful((fiber, _) => {
417
417
  if (fiber._exitValue !== null) {
@@ -431,8 +431,8 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
431
431
  }, this.id())
432
432
  }
433
433
 
434
- get inheritAll(): Effect.Effect<never, never, void> {
435
- return core.withFiberRuntime<never, never, void>((parentFiber, parentStatus) => {
434
+ get inheritAll(): Effect.Effect<void> {
435
+ return core.withFiberRuntime((parentFiber, parentStatus) => {
436
436
  const parentFiberId = parentFiber.id()
437
437
  const parentFiberRefs = parentFiber.getFiberRefs()
438
438
  const parentRuntimeFlags = parentStatus.runtimeFlags
@@ -458,7 +458,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
458
458
  * Tentatively observes the fiber, but returns immediately if it is not
459
459
  * already done.
460
460
  */
461
- get poll(): Effect.Effect<never, never, Option.Option<Exit.Exit<E, A>>> {
461
+ get poll(): Effect.Effect<Option.Option<Exit.Exit<A, E>>> {
462
462
  return core.sync(() => Option.fromNullable(this._exitValue))
463
463
  }
464
464
 
@@ -466,14 +466,14 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
466
466
  * Unsafely observes the fiber, but returns immediately if it is not
467
467
  * already done.
468
468
  */
469
- unsafePoll(): Exit.Exit<E, A> | null {
469
+ unsafePoll(): Exit.Exit<A, E> | null {
470
470
  return this._exitValue
471
471
  }
472
472
 
473
473
  /**
474
474
  * In the background, interrupts the fiber as if interrupted from the specified fiber.
475
475
  */
476
- interruptAsFork(fiberId: FiberId.FiberId): Effect.Effect<never, never, void> {
476
+ interruptAsFork(fiberId: FiberId.FiberId): Effect.Effect<void> {
477
477
  return core.sync(() => this.tell(FiberMessage.interruptSignal(internalCause.interrupt(fiberId))))
478
478
  }
479
479
 
@@ -489,7 +489,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
489
489
  *
490
490
  * **NOTE**: This method must be invoked by the fiber itself.
491
491
  */
492
- addObserver(observer: (exit: Exit.Exit<E, A>) => void): void {
492
+ addObserver(observer: (exit: Exit.Exit<A, E>) => void): void {
493
493
  if (this._exitValue !== null) {
494
494
  observer(this._exitValue!)
495
495
  } else {
@@ -503,7 +503,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
503
503
  *
504
504
  * **NOTE**: This method must be invoked by the fiber itself.
505
505
  */
506
- removeObserver(observer: (exit: Exit.Exit<E, A>) => void): void {
506
+ removeObserver(observer: (exit: Exit.Exit<A, E>) => void): void {
507
507
  this._observers = this._observers.filter((o) => o !== observer)
508
508
  }
509
509
  /**
@@ -749,7 +749,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
749
749
  return null
750
750
  }
751
751
 
752
- reportExitValue(exit: Exit.Exit<E, A>) {
752
+ reportExitValue(exit: Exit.Exit<A, E>) {
753
753
  if (_runtimeFlags.runtimeMetrics(this._runtimeFlags)) {
754
754
  const tags = this.getFiberRef(core.currentMetricLabels)
755
755
  const startTimeMillis = this.id().startTimeMillis
@@ -775,7 +775,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
775
775
  }
776
776
  }
777
777
 
778
- setExitValue(exit: Exit.Exit<E, A>) {
778
+ setExitValue(exit: Exit.Exit<A, E>) {
779
779
  this._exitValue = exit
780
780
  this.reportExitValue(exit)
781
781
  for (let i = this._observers.length - 1; i >= 0; i--) {
@@ -924,7 +924,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
924
924
  * This is not the normal way of starting a fiber, but it is useful when the
925
925
  * express goal of executing the fiber is to synchronously produce its exit.
926
926
  */
927
- start<R>(effect: Effect.Effect<R, E, A>): void {
927
+ start<R>(effect: Effect.Effect<A, E, R>): void {
928
928
  if (!this._running) {
929
929
  this._running = true
930
930
  const prev = (globalThis as any)[internalFiber.currentFiberURI]
@@ -953,7 +953,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
953
953
  * off" execution of a fiber after it has been created, in hopes that the
954
954
  * effect can be executed synchronously.
955
955
  */
956
- startFork<R>(effect: Effect.Effect<R, E, A>): void {
956
+ startFork<R>(effect: Effect.Effect<A, E, R>): void {
957
957
  this.tell(FiberMessage.resume(effect))
958
958
  }
959
959
 
@@ -1154,7 +1154,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
1154
1154
  const patchFlags = _runtimeFlags.diff(snap.flags, flags)
1155
1155
  return core.exitSucceed(core.blocked(
1156
1156
  op.i0,
1157
- core.withFiberRuntime((newFiber) => {
1157
+ core.withFiberRuntime<unknown, unknown>((newFiber) => {
1158
1158
  while (frames.length > 0) {
1159
1159
  newFiber.pushStack(frames.pop()!)
1160
1160
  }
@@ -1312,7 +1312,7 @@ export class FiberRuntime<in out E, in out A> implements Fiber.RuntimeFiber<E, A
1312
1312
  op._op === OpCodes.OP_SUCCESS ||
1313
1313
  op._op === OpCodes.OP_FAILURE
1314
1314
  ) ?
1315
- op as unknown as Exit.Exit<E, A> :
1315
+ op as unknown as Exit.Exit<A, E> :
1316
1316
  core.exitFailCause(internalCause.die(op))
1317
1317
  }
1318
1318
  } catch (e) {
@@ -1436,63 +1436,37 @@ export const currentLoggers: FiberRef.FiberRef<
1436
1436
 
1437
1437
  /* @internal */
1438
1438
  export const acquireRelease: {
1439
- <A, R2, X>(
1440
- release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1441
- ): <R, E>(acquire: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R | Scope.Scope, E, A>
1442
- <R, E, A, R2, X>(
1443
- acquire: Effect.Effect<R, E, A>,
1444
- release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1445
- ): Effect.Effect<Scope.Scope | R | R2, E, A>
1446
- } = dual<
1447
- {
1448
- <A, R2, X>(
1449
- release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1450
- ): <R, E>(acquire: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | Scope.Scope, E, A>
1451
- },
1452
- {
1453
- <R, E, A, R2, X>(
1454
- acquire: Effect.Effect<R, E, A>,
1455
- release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1456
- ): Effect.Effect<R | R2 | Scope.Scope, E, A>
1457
- }
1458
- >((args) => core.isEffect(args[0]), (acquire, release) => {
1459
- return core.uninterruptible(
1439
+ <A, X, R2>(
1440
+ release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<X, never, R2>
1441
+ ): <E, R>(acquire: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2 | R | Scope.Scope>
1442
+ <A, E, R, X, R2>(
1443
+ acquire: Effect.Effect<A, E, R>,
1444
+ release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<X, never, R2>
1445
+ ): Effect.Effect<A, E, R2 | R | Scope.Scope>
1446
+ } = dual((args) => core.isEffect(args[0]), (acquire, release) =>
1447
+ core.uninterruptible(
1460
1448
  core.tap(acquire, (a) => addFinalizer((exit) => release(a, exit)))
1461
- )
1462
- })
1449
+ ))
1463
1450
 
1464
1451
  /* @internal */
1465
1452
  export const acquireReleaseInterruptible: {
1466
- <A, R2, X>(
1467
- release: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1468
- ): <R, E>(acquire: Effect.Effect<R, E, A>) => Effect.Effect<Scope.Scope | R2 | R, E, A>
1469
- <R, E, A, R2, X>(
1470
- acquire: Effect.Effect<R, E, A>,
1471
- release: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1472
- ): Effect.Effect<Scope.Scope | R | R2, E, A>
1473
- } = dual<
1474
- {
1475
- <A, R2, X>(
1476
- release: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1477
- ): <R, E>(acquire: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | Scope.Scope, E, A>
1478
- },
1479
- {
1480
- <R, E, A, R2, X>(
1481
- acquire: Effect.Effect<R, E, A>,
1482
- release: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R2, never, X>
1483
- ): Effect.Effect<R | R2 | Scope.Scope, E, A>
1484
- }
1485
- >((args) => core.isEffect(args[0]), (acquire, release) => {
1486
- return ensuring(
1453
+ <X, R2>(
1454
+ release: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<X, never, R2>
1455
+ ): <A, E, R>(acquire: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Scope.Scope | R2 | R>
1456
+ <A, E, R, X, R2>(
1457
+ acquire: Effect.Effect<A, E, R>,
1458
+ release: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<X, never, R2>
1459
+ ): Effect.Effect<A, E, Scope.Scope | R2 | R>
1460
+ } = dual((args) => core.isEffect(args[0]), (acquire, release) =>
1461
+ ensuring(
1487
1462
  acquire,
1488
1463
  addFinalizer((exit) => release(exit))
1489
- )
1490
- })
1464
+ ))
1491
1465
 
1492
1466
  /* @internal */
1493
- export const addFinalizer = <R, X>(
1494
- finalizer: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R, never, X>
1495
- ): Effect.Effect<R | Scope.Scope, never, void> =>
1467
+ export const addFinalizer = <X, R>(
1468
+ finalizer: (exit: Exit.Exit<unknown, unknown>) => Effect.Effect<X, never, R>
1469
+ ): Effect.Effect<void, never, R | Scope.Scope> =>
1496
1470
  core.withFiberRuntime(
1497
1471
  (runtime) => {
1498
1472
  const acquireRefs = runtime.getFiberRefs()
@@ -1510,7 +1484,7 @@ export const addFinalizer = <R, X>(
1510
1484
  )
1511
1485
 
1512
1486
  return ensuring(
1513
- core.withRuntimeFlags(finalizer(exit) as Effect.Effect<never, never, X>, patchFlags),
1487
+ core.withRuntimeFlags(finalizer(exit) as Effect.Effect<X>, patchFlags),
1514
1488
  core.sync(() => {
1515
1489
  runtimeFinalizer.setFiberRefs(
1516
1490
  FiberRefsPatch.patch(inverseRefs, runtimeFinalizer.id(), runtimeFinalizer.getFiberRefs())
@@ -1522,7 +1496,7 @@ export const addFinalizer = <R, X>(
1522
1496
  )
1523
1497
 
1524
1498
  /* @internal */
1525
- export const daemonChildren = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, A> => {
1499
+ export const daemonChildren = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => {
1526
1500
  const forkScope = core.fiberRefLocally(core.currentForkScopeOverride, Option.some(fiberScope.globalScope))
1527
1501
  return forkScope(self)
1528
1502
  }
@@ -1531,38 +1505,44 @@ export const daemonChildren = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Ef
1531
1505
  const _existsParFound = Symbol.for("effect/Effect/existsPar/found")
1532
1506
 
1533
1507
  /* @internal */
1534
- export const exists = dual<
1535
- <R, E, A>(f: (a: A, i: number) => Effect.Effect<R, E, boolean>, options?: {
1508
+ export const exists: {
1509
+ <A, E, R>(f: (a: A, i: number) => Effect.Effect<boolean, E, R>, options?: {
1536
1510
  readonly concurrency?: Concurrency | undefined
1537
1511
  readonly batching?: boolean | "inherit" | undefined
1538
- }) => (elements: Iterable<A>) => Effect.Effect<R, E, boolean>,
1539
- <R, E, A>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, boolean>, options?: {
1512
+ }): (elements: Iterable<A>) => Effect.Effect<boolean, E, R>
1513
+ <A, E, R>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<boolean, E, R>, options?: {
1540
1514
  readonly concurrency?: Concurrency | undefined
1541
1515
  readonly batching?: boolean | "inherit" | undefined
1542
- }) => Effect.Effect<R, E, boolean>
1543
- >((args) => Predicate.isIterable(args[0]), (elements, f, options) =>
1544
- concurrency.matchSimple(
1545
- options?.concurrency,
1546
- () => core.suspend(() => existsLoop(elements[Symbol.iterator](), 0, f)),
1547
- () =>
1548
- core.matchEffect(
1549
- forEach(
1550
- elements,
1551
- (a, i) => core.if_(f(a, i), { onTrue: core.fail(_existsParFound), onFalse: core.unit }),
1552
- options
1553
- ),
1554
- {
1555
- onFailure: (e) => e === _existsParFound ? core.succeed(true) : core.fail(e),
1556
- onSuccess: () => core.succeed(false)
1557
- }
1558
- )
1559
- ))
1516
+ }): Effect.Effect<boolean, E, R>
1517
+ } = dual(
1518
+ (args) => Predicate.isIterable(args[0]),
1519
+ <A, E, R>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<boolean, E, R>, options?: {
1520
+ readonly concurrency?: Concurrency | undefined
1521
+ readonly batching?: boolean | "inherit" | undefined
1522
+ }) =>
1523
+ concurrency.matchSimple(
1524
+ options?.concurrency,
1525
+ () => core.suspend(() => existsLoop(elements[Symbol.iterator](), 0, f)),
1526
+ () =>
1527
+ core.matchEffect(
1528
+ forEach(
1529
+ elements,
1530
+ (a, i) => core.if_(f(a, i), { onTrue: core.fail(_existsParFound), onFalse: core.unit }),
1531
+ options
1532
+ ),
1533
+ {
1534
+ onFailure: (e) => e === _existsParFound ? core.succeed(true) : core.fail(e),
1535
+ onSuccess: () => core.succeed(false)
1536
+ }
1537
+ )
1538
+ )
1539
+ )
1560
1540
 
1561
- const existsLoop = <R, E, A>(
1541
+ const existsLoop = <A, E, R>(
1562
1542
  iterator: Iterator<A>,
1563
1543
  index: number,
1564
- f: (a: A, i: number) => Effect.Effect<R, E, boolean>
1565
- ): Effect.Effect<R, E, boolean> => {
1544
+ f: (a: A, i: number) => Effect.Effect<boolean, E, R>
1545
+ ): Effect.Effect<boolean, E, R> => {
1566
1546
  const next = iterator.next()
1567
1547
  if (next.done) {
1568
1548
  return core.succeed(false)
@@ -1575,22 +1555,22 @@ const existsLoop = <R, E, A>(
1575
1555
 
1576
1556
  /* @internal */
1577
1557
  export const filter = dual<
1578
- <A, R, E>(
1579
- f: (a: A, i: number) => Effect.Effect<R, E, boolean>,
1558
+ <A, E, R>(
1559
+ f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>,
1580
1560
  options?: {
1581
1561
  readonly concurrency?: Concurrency | undefined
1582
1562
  readonly batching?: boolean | "inherit" | undefined
1583
1563
  readonly negate?: boolean | undefined
1584
1564
  }
1585
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
1586
- <A, R, E>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, boolean>, options?: {
1565
+ ) => (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>,
1566
+ <A, E, R>(elements: Iterable<A>, f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>, options?: {
1587
1567
  readonly concurrency?: Concurrency | undefined
1588
1568
  readonly batching?: boolean | "inherit" | undefined
1589
1569
  readonly negate?: boolean | undefined
1590
- }) => Effect.Effect<R, E, Array<A>>
1570
+ }) => Effect.Effect<Array<A>, E, R>
1591
1571
  >(
1592
1572
  (args) => Predicate.isIterable(args[0]),
1593
- <A, R, E>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, boolean>, options?: {
1573
+ <A, E, R>(elements: Iterable<A>, f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>, options?: {
1594
1574
  readonly concurrency?: Concurrency | undefined
1595
1575
  readonly batching?: boolean | "inherit" | undefined
1596
1576
  readonly negate?: boolean | undefined
@@ -1607,7 +1587,7 @@ export const filter = dual<
1607
1587
  core.suspend(() => predicate(a, i)),
1608
1588
  (list, b) => b ? [a, ...list] : list
1609
1589
  ),
1610
- core.sync(() => new Array<A>()) as Effect.Effect<R, E, Array<A>>
1590
+ core.sync(() => new Array<A>()) as Effect.Effect<Array<A>, E, R>
1611
1591
  )
1612
1592
  ),
1613
1593
  () =>
@@ -1772,13 +1752,13 @@ export const allWith = <
1772
1752
  ): Effect.All.Return<Arg, O> => all(arg, options)
1773
1753
 
1774
1754
  /* @internal */
1775
- export const allSuccesses = <R, E, A>(
1776
- elements: Iterable<Effect.Effect<R, E, A>>,
1755
+ export const allSuccesses = <A, E, R>(
1756
+ elements: Iterable<Effect.Effect<A, E, R>>,
1777
1757
  options?: {
1778
1758
  readonly concurrency?: Concurrency | undefined
1779
1759
  readonly batching?: boolean | "inherit" | undefined
1780
1760
  }
1781
- ): Effect.Effect<R, never, Array<A>> =>
1761
+ ): Effect.Effect<Array<A>, never, R> =>
1782
1762
  core.map(
1783
1763
  all(RA.fromIterable(elements).map(core.exit), options),
1784
1764
  RA.filterMap((exit) => core.exitIsSuccess(exit) ? Option.some(exit.i0) : Option.none())
@@ -1786,8 +1766,8 @@ export const allSuccesses = <R, E, A>(
1786
1766
 
1787
1767
  /* @internal */
1788
1768
  export const replicate = dual<
1789
- (n: number) => <R, E, A>(self: Effect.Effect<R, E, A>) => Array<Effect.Effect<R, E, A>>,
1790
- <R, E, A>(self: Effect.Effect<R, E, A>, n: number) => Array<Effect.Effect<R, E, A>>
1769
+ (n: number) => <A, E, R>(self: Effect.Effect<A, E, R>) => Array<Effect.Effect<A, E, R>>,
1770
+ <A, E, R>(self: Effect.Effect<A, E, R>, n: number) => Array<Effect.Effect<A, E, R>>
1791
1771
  >(2, (self, n) => Array.from({ length: n }, () => self))
1792
1772
 
1793
1773
  /* @internal */
@@ -1799,7 +1779,7 @@ export const replicateEffect: {
1799
1779
  readonly batching?: boolean | "inherit" | undefined
1800
1780
  readonly discard?: false | undefined
1801
1781
  }
1802
- ): <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Array<A>>
1782
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Array<A>, E, R>
1803
1783
  (
1804
1784
  n: number,
1805
1785
  options: {
@@ -1807,25 +1787,25 @@ export const replicateEffect: {
1807
1787
  readonly batching?: boolean | "inherit" | undefined
1808
1788
  readonly discard: true
1809
1789
  }
1810
- ): <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, void>
1811
- <R, E, A>(
1812
- self: Effect.Effect<R, E, A>,
1790
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<void, E, R>
1791
+ <A, E, R>(
1792
+ self: Effect.Effect<A, E, R>,
1813
1793
  n: number,
1814
1794
  options?: {
1815
1795
  readonly concurrency?: Concurrency | undefined
1816
1796
  readonly batching?: boolean | "inherit" | undefined
1817
1797
  readonly discard?: false | undefined
1818
1798
  }
1819
- ): Effect.Effect<R, E, Array<A>>
1820
- <R, E, A>(
1821
- self: Effect.Effect<R, E, A>,
1799
+ ): Effect.Effect<Array<A>, E, R>
1800
+ <A, E, R>(
1801
+ self: Effect.Effect<A, E, R>,
1822
1802
  n: number,
1823
1803
  options: {
1824
1804
  readonly concurrency?: Concurrency | undefined
1825
1805
  readonly batching?: boolean | "inherit" | undefined
1826
1806
  readonly discard: true
1827
1807
  }
1828
- ): Effect.Effect<R, E, void>
1808
+ ): Effect.Effect<void, E, R>
1829
1809
  } = dual(
1830
1810
  (args) => core.isEffect(args[0]),
1831
1811
  (self, n, options) => all(replicate(self, n), options)
@@ -1833,50 +1813,50 @@ export const replicateEffect: {
1833
1813
 
1834
1814
  /* @internal */
1835
1815
  export const forEach: {
1836
- <A, R, E, B>(
1837
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
1816
+ <A, B, E, R>(
1817
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
1838
1818
  options?: {
1839
1819
  readonly concurrency?: Concurrency | undefined
1840
1820
  readonly batching?: boolean | "inherit" | undefined
1841
1821
  readonly discard?: false | undefined
1842
1822
  }
1843
- ): (self: Iterable<A>) => Effect.Effect<R, E, Array<B>>
1844
- <A, R, E, B>(
1845
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
1823
+ ): (self: Iterable<A>) => Effect.Effect<Array<B>, E, R>
1824
+ <A, B, E, R>(
1825
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
1846
1826
  options: {
1847
1827
  readonly concurrency?: Concurrency | undefined
1848
1828
  readonly batching?: boolean | "inherit" | undefined
1849
1829
  readonly discard: true
1850
1830
  }
1851
- ): (self: Iterable<A>) => Effect.Effect<R, E, void>
1852
- <A, R, E, B>(
1831
+ ): (self: Iterable<A>) => Effect.Effect<void, E, R>
1832
+ <A, B, E, R>(
1853
1833
  self: Iterable<A>,
1854
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
1834
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
1855
1835
  options?: {
1856
1836
  readonly concurrency?: Concurrency | undefined
1857
1837
  readonly batching?: boolean | "inherit" | undefined
1858
1838
  readonly discard?: false | undefined
1859
1839
  }
1860
- ): Effect.Effect<R, E, Array<B>>
1861
- <A, R, E, B>(
1840
+ ): Effect.Effect<Array<B>, E, R>
1841
+ <A, B, E, R>(
1862
1842
  self: Iterable<A>,
1863
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
1843
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
1864
1844
  options: {
1865
1845
  readonly concurrency?: Concurrency | undefined
1866
1846
  readonly batching?: boolean | "inherit" | undefined
1867
1847
  readonly discard: true
1868
1848
  }
1869
- ): Effect.Effect<R, E, void>
1849
+ ): Effect.Effect<void, E, R>
1870
1850
  } = dual((args) => Predicate.isIterable(args[0]), <A, R, E, B>(
1871
1851
  self: Iterable<A>,
1872
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
1852
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
1873
1853
  options?: {
1874
1854
  readonly concurrency?: Concurrency | undefined
1875
1855
  readonly batching?: boolean | "inherit" | undefined
1876
1856
  readonly discard?: boolean | undefined
1877
1857
  }
1878
1858
  ) =>
1879
- core.withFiberRuntime<R, E, A | void>((r) => {
1859
+ core.withFiberRuntime<A | void, E, R>((r) => {
1880
1860
  const isRequestBatchingEnabled = options?.batching === true ||
1881
1861
  (options?.batching === "inherit" && r.getFiberRef(core.currentRequestBatching))
1882
1862
 
@@ -1920,11 +1900,11 @@ export const forEach: {
1920
1900
  }))
1921
1901
 
1922
1902
  /* @internal */
1923
- export const forEachParUnbounded = <A, R, E, B>(
1903
+ export const forEachParUnbounded = <A, B, E, R>(
1924
1904
  self: Iterable<A>,
1925
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
1905
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
1926
1906
  batching: boolean
1927
- ): Effect.Effect<R, E, Array<B>> =>
1907
+ ): Effect.Effect<Array<B>, E, R> =>
1928
1908
  core.suspend(() => {
1929
1909
  const as = RA.fromIterable(self)
1930
1910
  const array = new Array<B>(as.length)
@@ -1933,13 +1913,13 @@ export const forEachParUnbounded = <A, R, E, B>(
1933
1913
  })
1934
1914
 
1935
1915
  /** @internal */
1936
- export const forEachConcurrentDiscard = <R, E, A, _>(
1916
+ export const forEachConcurrentDiscard = <A, _, E, R>(
1937
1917
  self: Iterable<A>,
1938
- f: (a: A, i: number) => Effect.Effect<R, E, _>,
1918
+ f: (a: A, i: number) => Effect.Effect<_, E, R>,
1939
1919
  batching: boolean,
1940
1920
  processAll: boolean,
1941
1921
  n?: number
1942
- ): Effect.Effect<R, E, void> =>
1922
+ ): Effect.Effect<void, E, R> =>
1943
1923
  core.uninterruptibleMask((restore) =>
1944
1924
  core.transplant((graft) =>
1945
1925
  core.withFiberRuntime((parent) => {
@@ -1951,7 +1931,7 @@ export const forEachConcurrentDiscard = <R, E, A, _>(
1951
1931
  let counter = 0
1952
1932
  let interrupted = false
1953
1933
  const fibersCount = n ? Math.min(todos.length, n) : todos.length
1954
- const fibers = new Set<FiberRuntime<never, Exit.Exit<E, _> | Effect.Blocked<E, _>>>()
1934
+ const fibers = new Set<FiberRuntime<Exit.Exit<_, E> | Effect.Blocked<_, E>>>()
1955
1935
  const results = new Array()
1956
1936
  const interruptAll = () =>
1957
1937
  fibers.forEach((fiber) => {
@@ -1959,11 +1939,11 @@ export const forEachConcurrentDiscard = <R, E, A, _>(
1959
1939
  fiber.unsafeInterruptAsFork(parent.id())
1960
1940
  }, 0)
1961
1941
  })
1962
- const startOrder = new Array<FiberRuntime<never, Exit.Exit<E, _> | Effect.Blocked<E, _>>>()
1963
- const joinOrder = new Array<FiberRuntime<never, Exit.Exit<E, _> | Effect.Blocked<E, _>>>()
1942
+ const startOrder = new Array<FiberRuntime<Exit.Exit<_, E> | Effect.Blocked<_, E>>>()
1943
+ const joinOrder = new Array<FiberRuntime<Exit.Exit<_, E> | Effect.Blocked<_, E>>>()
1964
1944
  const residual = new Array<core.Blocked>()
1965
1945
  const collectExits = () => {
1966
- const exits: Array<Exit.Exit<E, any>> = results
1946
+ const exits: Array<Exit.Exit<any, E>> = results
1967
1947
  .filter(({ exit }) => exit._tag === "Failure")
1968
1948
  .sort((a, b) => a.index < b.index ? -1 : a.index === b.index ? 0 : 1)
1969
1949
  .map(({ exit }) => exit)
@@ -1972,7 +1952,7 @@ export const forEachConcurrentDiscard = <R, E, A, _>(
1972
1952
  }
1973
1953
  return exits
1974
1954
  }
1975
- const runFiber = <R, E, A>(eff: Effect.Effect<R, E, A>) => {
1955
+ const runFiber = <A, E, R>(eff: Effect.Effect<A, E, R>) => {
1976
1956
  const runnable = core.uninterruptible(graft(eff))
1977
1957
  const fiber = unsafeForkUnstarted(
1978
1958
  runnable,
@@ -1996,7 +1976,7 @@ export const forEachConcurrentDiscard = <R, E, A, _>(
1996
1976
  const stepOrExit = batching ? core.step : core.exit
1997
1977
  const processingFiber = runFiber(
1998
1978
  core.async<any, any, any>((resume) => {
1999
- const pushResult = <E, _>(res: Exit.Exit<E, _> | Effect.Blocked<E, _>, index: number) => {
1979
+ const pushResult = <_, E>(res: Exit.Exit<_, E> | Effect.Blocked<_, E>, index: number) => {
2000
1980
  if (res._op === "Blocked") {
2001
1981
  residual.push(res as core.Blocked)
2002
1982
  } else {
@@ -2020,8 +2000,8 @@ export const forEachConcurrentDiscard = <R, E, A, _>(
2020
2000
  ))
2021
2001
  }
2022
2002
  const onRes = (
2023
- res: Exit.Exit<E, _> | Effect.Blocked<E, _>
2024
- ): Effect.Effect<R, never, Exit.Exit<E, _> | Effect.Blocked<E, _>> => {
2003
+ res: Exit.Exit<_, E> | Effect.Blocked<_, E>
2004
+ ): Effect.Effect<Exit.Exit<_, E> | Effect.Blocked<_, E>, never, R> => {
2025
2005
  if (todos.length > 0) {
2026
2006
  pushResult(res, index)
2027
2007
  if (todos.length > 0) {
@@ -2101,12 +2081,12 @@ export const forEachConcurrentDiscard = <R, E, A, _>(
2101
2081
  )
2102
2082
 
2103
2083
  /* @internal */
2104
- export const forEachParN = <A, R, E, B>(
2084
+ export const forEachParN = <A, B, E, R>(
2105
2085
  self: Iterable<A>,
2106
2086
  n: number,
2107
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
2087
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
2108
2088
  batching: boolean
2109
- ): Effect.Effect<R, E, Array<B>> =>
2089
+ ): Effect.Effect<Array<B>, E, R> =>
2110
2090
  core.suspend(() => {
2111
2091
  const as = RA.fromIterable(self)
2112
2092
  const array = new Array<B>(as.length)
@@ -2115,71 +2095,67 @@ export const forEachParN = <A, R, E, B>(
2115
2095
  })
2116
2096
 
2117
2097
  /* @internal */
2118
- export const fork = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Fiber.RuntimeFiber<E, A>> =>
2119
- core.withFiberRuntime<R, never, Fiber.RuntimeFiber<E, A>>((state, status) =>
2120
- core.succeed(unsafeFork(self, state, status.runtimeFlags))
2121
- )
2098
+ export const fork = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Fiber.RuntimeFiber<A, E>, never, R> =>
2099
+ core.withFiberRuntime((state, status) => core.succeed(unsafeFork(self, state, status.runtimeFlags)))
2122
2100
 
2123
2101
  /* @internal */
2124
- export const forkDaemon = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Fiber.RuntimeFiber<E, A>> =>
2102
+ export const forkDaemon = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Fiber.RuntimeFiber<A, E>, never, R> =>
2125
2103
  forkWithScopeOverride(self, fiberScope.globalScope)
2126
2104
 
2127
2105
  /* @internal */
2128
2106
  export const forkWithErrorHandler = dual<
2129
2107
  <E, X>(
2130
- handler: (e: E) => Effect.Effect<never, never, X>
2131
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, Fiber.RuntimeFiber<E, A>>,
2132
- <R, E, A, X>(
2133
- self: Effect.Effect<R, E, A>,
2134
- handler: (e: E) => Effect.Effect<never, never, X>
2135
- ) => Effect.Effect<R, never, Fiber.RuntimeFiber<E, A>>
2108
+ handler: (e: E) => Effect.Effect<X>
2109
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Fiber.RuntimeFiber<A, E>, never, R>,
2110
+ <A, E, R, X>(
2111
+ self: Effect.Effect<A, E, R>,
2112
+ handler: (e: E) => Effect.Effect<X>
2113
+ ) => Effect.Effect<Fiber.RuntimeFiber<A, E>, never, R>
2136
2114
  >(2, (self, handler) =>
2137
2115
  fork(core.onError(self, (cause) => {
2138
2116
  const either = internalCause.failureOrCause(cause)
2139
2117
  switch (either._tag) {
2140
- case "Left": {
2118
+ case "Left":
2141
2119
  return handler(either.left)
2142
- }
2143
- case "Right": {
2120
+ case "Right":
2144
2121
  return core.failCause(either.right)
2145
- }
2146
2122
  }
2147
2123
  })))
2148
2124
 
2149
2125
  /** @internal */
2150
- export const unsafeFork = <R, E, A, E2, B>(
2151
- effect: Effect.Effect<R, E, A>,
2152
- parentFiber: FiberRuntime<E2, B>,
2126
+ export const unsafeFork = <A, E, R, E2, B>(
2127
+ effect: Effect.Effect<A, E, R>,
2128
+ parentFiber: FiberRuntime<B, E2>,
2153
2129
  parentRuntimeFlags: RuntimeFlags.RuntimeFlags,
2154
2130
  overrideScope: fiberScope.FiberScope | null = null
2155
- ): FiberRuntime<E, A> => {
2131
+ ): FiberRuntime<A, E> => {
2156
2132
  const childFiber = unsafeMakeChildFiber(effect, parentFiber, parentRuntimeFlags, overrideScope)
2157
2133
  childFiber.resume(effect)
2158
2134
  return childFiber
2159
2135
  }
2160
2136
 
2161
2137
  /** @internal */
2162
- export const unsafeForkUnstarted = <R, E, A, E2, B>(
2163
- effect: Effect.Effect<R, E, A>,
2164
- parentFiber: FiberRuntime<E2, B>,
2138
+ export const unsafeForkUnstarted = <A, E, R, E2, B>(
2139
+ effect: Effect.Effect<A, E, R>,
2140
+ parentFiber: FiberRuntime<B, E2>,
2165
2141
  parentRuntimeFlags: RuntimeFlags.RuntimeFlags,
2166
2142
  overrideScope: fiberScope.FiberScope | null = null
2167
- ): FiberRuntime<E, A> => {
2143
+ ): FiberRuntime<A, E> => {
2168
2144
  const childFiber = unsafeMakeChildFiber(effect, parentFiber, parentRuntimeFlags, overrideScope)
2169
2145
  return childFiber
2170
2146
  }
2171
2147
 
2172
2148
  /** @internal */
2173
- export const unsafeMakeChildFiber = <R, E, A, E2, B>(
2174
- effect: Effect.Effect<R, E, A>,
2175
- parentFiber: FiberRuntime<E2, B>,
2149
+ export const unsafeMakeChildFiber = <A, E, R, E2, B>(
2150
+ effect: Effect.Effect<A, E, R>,
2151
+ parentFiber: FiberRuntime<B, E2>,
2176
2152
  parentRuntimeFlags: RuntimeFlags.RuntimeFlags,
2177
2153
  overrideScope: fiberScope.FiberScope | null = null
2178
- ): FiberRuntime<E, A> => {
2154
+ ): FiberRuntime<A, E> => {
2179
2155
  const childId = FiberId.unsafeMake()
2180
2156
  const parentFiberRefs = parentFiber.getFiberRefs()
2181
2157
  const childFiberRefs = fiberRefs.forkAs(parentFiberRefs, childId)
2182
- const childFiber = new FiberRuntime<E, A>(childId, childFiberRefs, parentRuntimeFlags)
2158
+ const childFiber = new FiberRuntime<A, E>(childId, childFiberRefs, parentRuntimeFlags)
2183
2159
  const childContext = fiberRefs.getOrDefault(
2184
2160
  childFiberRefs,
2185
2161
  core.currentContext as unknown as FiberRef.FiberRef<Context.Context<R>>
@@ -2206,11 +2182,11 @@ export const unsafeMakeChildFiber = <R, E, A, E2, B>(
2206
2182
  }
2207
2183
 
2208
2184
  /* @internal */
2209
- const forkWithScopeOverride = <R, E, A>(
2210
- self: Effect.Effect<R, E, A>,
2185
+ const forkWithScopeOverride = <A, E, R>(
2186
+ self: Effect.Effect<A, E, R>,
2211
2187
  scopeOverride: fiberScope.FiberScope
2212
- ): Effect.Effect<R, never, Fiber.RuntimeFiber<E, A>> =>
2213
- core.withFiberRuntime<R, never, Fiber.RuntimeFiber<E, A>>((parentFiber, parentStatus) =>
2188
+ ): Effect.Effect<Fiber.RuntimeFiber<A, E>, never, R> =>
2189
+ core.withFiberRuntime((parentFiber, parentStatus) =>
2214
2190
  core.succeed(unsafeFork(self, parentFiber, parentStatus.runtimeFlags, scopeOverride))
2215
2191
  )
2216
2192
 
@@ -2219,14 +2195,14 @@ export const mergeAll = dual<
2219
2195
  <Z, A>(zero: Z, f: (z: Z, a: A, i: number) => Z, options?: {
2220
2196
  readonly concurrency?: Concurrency | undefined
2221
2197
  readonly batching?: boolean | "inherit" | undefined
2222
- }) => <R, E>(elements: Iterable<Effect.Effect<R, E, A>>) => Effect.Effect<R, E, Z>,
2223
- <R, E, A, Z>(elements: Iterable<Effect.Effect<R, E, A>>, zero: Z, f: (z: Z, a: A, i: number) => Z, options?: {
2198
+ }) => <E, R>(elements: Iterable<Effect.Effect<A, E, R>>) => Effect.Effect<Z, E, R>,
2199
+ <A, E, R, Z>(elements: Iterable<Effect.Effect<A, E, R>>, zero: Z, f: (z: Z, a: A, i: number) => Z, options?: {
2224
2200
  readonly concurrency?: Concurrency | undefined
2225
2201
  readonly batching?: boolean | "inherit" | undefined
2226
- }) => Effect.Effect<R, E, Z>
2202
+ }) => Effect.Effect<Z, E, R>
2227
2203
  >(
2228
2204
  (args) => Predicate.isFunction(args[2]),
2229
- <R, E, A, Z>(elements: Iterable<Effect.Effect<R, E, A>>, zero: Z, f: (z: Z, a: A, i: number) => Z, options?: {
2205
+ <A, E, R, Z>(elements: Iterable<Effect.Effect<A, E, R>>, zero: Z, f: (z: Z, a: A, i: number) => Z, options?: {
2230
2206
  readonly concurrency?: Concurrency | undefined
2231
2207
  readonly batching?: boolean | "inherit" | undefined
2232
2208
  }) =>
@@ -2235,7 +2211,7 @@ export const mergeAll = dual<
2235
2211
  () =>
2236
2212
  RA.fromIterable(elements).reduce(
2237
2213
  (acc, a, i) => core.zipWith(acc, a, (acc, a) => f(acc, a, i)),
2238
- core.succeed(zero) as Effect.Effect<R, E, Z>
2214
+ core.succeed(zero) as Effect.Effect<Z, E, R>
2239
2215
  ),
2240
2216
  () =>
2241
2217
  core.flatMap(Ref.make(zero), (acc) =>
@@ -2252,21 +2228,21 @@ export const mergeAll = dual<
2252
2228
 
2253
2229
  /* @internal */
2254
2230
  export const partition = dual<
2255
- <R, E, A, B>(
2256
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
2231
+ <A, B, E, R>(
2232
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
2257
2233
  options?: {
2258
2234
  readonly concurrency?: Concurrency | undefined
2259
2235
  readonly batching?: boolean | "inherit" | undefined
2260
2236
  }
2261
- ) => (elements: Iterable<A>) => Effect.Effect<R, never, [excluded: Array<E>, satisfying: Array<B>]>,
2262
- <R, E, A, B>(
2237
+ ) => (elements: Iterable<A>) => Effect.Effect<[excluded: Array<E>, satisfying: Array<B>], never, R>,
2238
+ <A, B, E, R>(
2263
2239
  elements: Iterable<A>,
2264
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
2240
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
2265
2241
  options?: {
2266
2242
  readonly concurrency?: Concurrency | undefined
2267
2243
  readonly batching?: boolean | "inherit" | undefined
2268
2244
  }
2269
- ) => Effect.Effect<R, never, [excluded: Array<E>, satisfying: Array<B>]>
2245
+ ) => Effect.Effect<[excluded: Array<E>, satisfying: Array<B>], never, R>
2270
2246
  >((args) => Predicate.isIterable(args[0]), (elements, f, options) =>
2271
2247
  pipe(
2272
2248
  forEach(elements, (a, i) => core.either(f(a, i)), options),
@@ -2276,50 +2252,50 @@ export const partition = dual<
2276
2252
  /* @internal */
2277
2253
  export const validateAll = dual<
2278
2254
  {
2279
- <R, E, A, B>(
2280
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
2255
+ <A, B, E, R>(
2256
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
2281
2257
  options?: {
2282
2258
  readonly concurrency?: Concurrency | undefined
2283
2259
  readonly batching?: boolean | "inherit" | undefined
2284
2260
  readonly discard?: false | undefined
2285
2261
  }
2286
- ): (elements: Iterable<A>) => Effect.Effect<R, Array<E>, Array<B>>
2287
- <R, E, A, B>(
2288
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
2262
+ ): (elements: Iterable<A>) => Effect.Effect<Array<B>, Array<E>, R>
2263
+ <A, B, E, R>(
2264
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
2289
2265
  options: {
2290
2266
  readonly concurrency?: Concurrency | undefined
2291
2267
  readonly batching?: boolean | "inherit" | undefined
2292
2268
  readonly discard: true
2293
2269
  }
2294
- ): (elements: Iterable<A>) => Effect.Effect<R, Array<E>, void>
2270
+ ): (elements: Iterable<A>) => Effect.Effect<void, Array<E>, R>
2295
2271
  },
2296
2272
  {
2297
- <R, E, A, B>(
2273
+ <A, B, E, R>(
2298
2274
  elements: Iterable<A>,
2299
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
2275
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
2300
2276
  options?: {
2301
2277
  readonly concurrency?: Concurrency | undefined
2302
2278
  readonly batching?: boolean | "inherit" | undefined
2303
2279
  readonly discard?: false | undefined
2304
2280
  }
2305
- ): Effect.Effect<R, Array<E>, Array<B>>
2306
- <R, E, A, B>(
2281
+ ): Effect.Effect<Array<B>, Array<E>, R>
2282
+ <A, B, E, R>(
2307
2283
  elements: Iterable<A>,
2308
- f: (a: A, i: number) => Effect.Effect<R, E, B>,
2284
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
2309
2285
  options: {
2310
2286
  readonly concurrency?: Concurrency | undefined
2311
2287
  readonly batching?: boolean | "inherit" | undefined
2312
2288
  readonly discard: true
2313
2289
  }
2314
- ): Effect.Effect<R, Array<E>, void>
2290
+ ): Effect.Effect<void, Array<E>, R>
2315
2291
  }
2316
2292
  >(
2317
2293
  (args) => Predicate.isIterable(args[0]),
2318
- <R, E, A, B>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, B>, options?: {
2294
+ <A, B, E, R>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>, options?: {
2319
2295
  readonly concurrency?: Concurrency | undefined
2320
2296
  readonly batching?: boolean | "inherit" | undefined
2321
2297
  readonly discard?: boolean | undefined
2322
- }): Effect.Effect<R, Array<E>, any> =>
2298
+ }): Effect.Effect<any, Array<E>, R> =>
2323
2299
  core.flatMap(
2324
2300
  partition(elements, f, {
2325
2301
  concurrency: options?.concurrency,
@@ -2333,33 +2309,33 @@ export const validateAll = dual<
2333
2309
  )
2334
2310
 
2335
2311
  /* @internal */
2336
- export const raceAll = <R, E, A>(all: Iterable<Effect.Effect<R, E, A>>) => {
2312
+ export const raceAll = <A, E, R>(all: Iterable<Effect.Effect<A, E, R>>): Effect.Effect<A, E, R> => {
2337
2313
  const list = Chunk.fromIterable(all)
2338
2314
  if (!Chunk.isNonEmpty(list)) {
2339
2315
  return core.dieSync(() => new core.IllegalArgumentException(`Received an empty collection of effects`))
2340
2316
  }
2341
2317
  const self = Chunk.headNonEmpty(list)
2342
2318
  const effects = Chunk.tailNonEmpty(list)
2343
- const inheritAll = (res: readonly [A, Fiber.Fiber<E, A>]) =>
2319
+ const inheritAll = (res: readonly [A, Fiber.Fiber<A, E>]) =>
2344
2320
  pipe(
2345
2321
  internalFiber.inheritAll(res[1]),
2346
2322
  core.as(res[0])
2347
2323
  )
2348
2324
  return pipe(
2349
- core.deferredMake<E, readonly [A, Fiber.Fiber<E, A>]>(),
2325
+ core.deferredMake<readonly [A, Fiber.Fiber<A, E>], E>(),
2350
2326
  core.flatMap((done) =>
2351
2327
  pipe(
2352
2328
  Ref.make(effects.length),
2353
2329
  core.flatMap((fails) =>
2354
- core.uninterruptibleMask<R, E, A>((restore) =>
2330
+ core.uninterruptibleMask<A, E, R>((restore) =>
2355
2331
  pipe(
2356
2332
  fork(core.interruptible(self)),
2357
2333
  core.flatMap((head) =>
2358
2334
  pipe(
2359
2335
  effects,
2360
2336
  core.forEachSequential((effect) => fork(core.interruptible(effect))),
2361
- core.map(Chunk.unsafeFromArray),
2362
- core.map((tail) => pipe(tail, Chunk.prepend(head)) as Chunk.Chunk<Fiber.RuntimeFiber<E, A>>),
2337
+ core.map((fibers) => Chunk.unsafeFromArray(fibers)),
2338
+ core.map((tail) => pipe(tail, Chunk.prepend(head)) as Chunk.Chunk<Fiber.RuntimeFiber<A, E>>),
2363
2339
  core.tap((fibers) =>
2364
2340
  pipe(
2365
2341
  fibers,
@@ -2401,14 +2377,13 @@ export const raceAll = <R, E, A>(all: Iterable<Effect.Effect<R, E, A>>) => {
2401
2377
  )
2402
2378
  }
2403
2379
 
2404
- /* @internal */
2405
2380
  const raceAllArbiter = <E, E1, A, A1>(
2406
- fibers: Iterable<Fiber.Fiber<E | E1, A | A1>>,
2407
- winner: Fiber.Fiber<E | E1, A | A1>,
2408
- deferred: Deferred.Deferred<E | E1, readonly [A | A1, Fiber.Fiber<E | E1, A | A1>]>,
2381
+ fibers: Iterable<Fiber.Fiber<A | A1, E | E1>>,
2382
+ winner: Fiber.Fiber<A | A1, E | E1>,
2383
+ deferred: Deferred.Deferred<readonly [A | A1, Fiber.Fiber<A | A1, E | E1>], E | E1>,
2409
2384
  fails: Ref.Ref<number>
2410
2385
  ) =>
2411
- (exit: Exit.Exit<E | E1, A | A1>): Effect.Effect<never, never, void> =>
2386
+ (exit: Exit.Exit<A | A1, E | E1>): Effect.Effect<void> =>
2412
2387
  core.exitMatchEffect(exit, {
2413
2388
  onFailure: (cause) =>
2414
2389
  pipe(
@@ -2421,7 +2396,7 @@ const raceAllArbiter = <E, E1, A, A1>(
2421
2396
  ] as const),
2422
2397
  core.flatten
2423
2398
  ),
2424
- onSuccess: (value): Effect.Effect<never, never, void> =>
2399
+ onSuccess: (value): Effect.Effect<void> =>
2425
2400
  pipe(
2426
2401
  core.deferredSucceed(deferred, [value, winner] as const),
2427
2402
  core.flatMap((set) =>
@@ -2443,27 +2418,27 @@ const raceAllArbiter = <E, E1, A, A1>(
2443
2418
 
2444
2419
  /* @internal */
2445
2420
  export const reduceEffect = dual<
2446
- <R, E, A>(
2447
- zero: Effect.Effect<R, E, A>,
2448
- f: (acc: A, a: A, i: number) => A,
2421
+ <A, E, R>(
2422
+ zero: Effect.Effect<A, E, R>,
2423
+ f: (acc: NoInfer<A>, a: NoInfer<A>, i: number) => A,
2449
2424
  options?: {
2450
2425
  readonly concurrency?: Concurrency | undefined
2451
2426
  readonly batching?: boolean | "inherit" | undefined
2452
2427
  }
2453
- ) => (elements: Iterable<Effect.Effect<R, E, A>>) => Effect.Effect<R, E, A>,
2454
- <R, E, A>(
2455
- elements: Iterable<Effect.Effect<R, E, A>>,
2456
- zero: Effect.Effect<R, E, A>,
2457
- f: (acc: A, a: A, i: number) => A,
2428
+ ) => (elements: Iterable<Effect.Effect<A, E, R>>) => Effect.Effect<A, E, R>,
2429
+ <A, E, R>(
2430
+ elements: Iterable<Effect.Effect<A, E, R>>,
2431
+ zero: Effect.Effect<A, E, R>,
2432
+ f: (acc: NoInfer<A>, a: NoInfer<A>, i: number) => A,
2458
2433
  options?: {
2459
2434
  readonly concurrency?: Concurrency | undefined
2460
2435
  readonly batching?: boolean | "inherit" | undefined
2461
2436
  }
2462
- ) => Effect.Effect<R, E, A>
2463
- >((args) => Predicate.isIterable(args[0]), <R, E, A>(
2464
- elements: Iterable<Effect.Effect<R, E, A>>,
2465
- zero: Effect.Effect<R, E, A>,
2466
- f: (acc: A, a: A, i: number) => A,
2437
+ ) => Effect.Effect<A, E, R>
2438
+ >((args) => Predicate.isIterable(args[0]), <A, E, R>(
2439
+ elements: Iterable<Effect.Effect<A, E, R>>,
2440
+ zero: Effect.Effect<A, E, R>,
2441
+ f: (acc: NoInfer<A>, a: NoInfer<A>, i: number) => A,
2467
2442
  options?: {
2468
2443
  readonly concurrency?: Concurrency | undefined
2469
2444
  readonly batching?: boolean | "inherit" | undefined
@@ -2507,7 +2482,7 @@ export const reduceEffect = dual<
2507
2482
  ))
2508
2483
 
2509
2484
  /* @internal */
2510
- export const parallelFinalizers = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, A> =>
2485
+ export const parallelFinalizers = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
2511
2486
  core.contextWithEffect((context) =>
2512
2487
  Option.match(Context.getOption(context, scopeTag), {
2513
2488
  onNone: () => self,
@@ -2528,7 +2503,7 @@ export const parallelFinalizers = <R, E, A>(self: Effect.Effect<R, E, A>): Effec
2528
2503
 
2529
2504
  /* @internal */
2530
2505
  export const parallelNFinalizers =
2531
- (parallelism: number) => <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, A> =>
2506
+ (parallelism: number) => <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
2532
2507
  core.contextWithEffect((context) =>
2533
2508
  Option.match(Context.getOption(context, scopeTag), {
2534
2509
  onNone: () => self,
@@ -2546,9 +2521,9 @@ export const parallelNFinalizers =
2546
2521
 
2547
2522
  /* @internal */
2548
2523
  export const finalizersMask = (strategy: ExecutionStrategy.ExecutionStrategy) =>
2549
- <R, E, A>(
2550
- self: (restore: <R1, E1, A1>(self: Effect.Effect<R1, E1, A1>) => Effect.Effect<R1, E1, A1>) => Effect.Effect<R, E, A>
2551
- ): Effect.Effect<R, E, A> =>
2524
+ <A, E, R>(
2525
+ self: (restore: <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>) => Effect.Effect<A1, E1, R1>) => Effect.Effect<A, E, R>
2526
+ ): Effect.Effect<A, E, R> =>
2552
2527
  core.contextWithEffect((context) =>
2553
2528
  Option.match(Context.getOption(context, scopeTag), {
2554
2529
  onNone: () => self(identity),
@@ -2571,16 +2546,16 @@ export const finalizersMask = (strategy: ExecutionStrategy.ExecutionStrategy) =>
2571
2546
  )
2572
2547
 
2573
2548
  /* @internal */
2574
- export const scopeWith = <R, E, A>(
2575
- f: (scope: Scope.Scope) => Effect.Effect<R, E, A>
2576
- ): Effect.Effect<R | Scope.Scope, E, A> => core.flatMap(scopeTag, f)
2549
+ export const scopeWith = <A, E, R>(
2550
+ f: (scope: Scope.Scope) => Effect.Effect<A, E, R>
2551
+ ): Effect.Effect<A, E, R | Scope.Scope> => core.flatMap(scopeTag, f)
2577
2552
 
2578
2553
  /* @internal */
2579
- export const scopedEffect = <R, E, A>(effect: Effect.Effect<R, E, A>): Effect.Effect<Exclude<R, Scope.Scope>, E, A> =>
2554
+ export const scopedEffect = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, Exclude<R, Scope.Scope>> =>
2580
2555
  core.flatMap(scopeMake(), (scope) => scopeUse(scope)(effect))
2581
2556
 
2582
2557
  /* @internal */
2583
- export const sequentialFinalizers = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, A> =>
2558
+ export const sequentialFinalizers = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
2584
2559
  core.contextWithEffect((context) =>
2585
2560
  Option.match(Context.getOption(context, scopeTag), {
2586
2561
  onNone: () => self,
@@ -2600,24 +2575,24 @@ export const sequentialFinalizers = <R, E, A>(self: Effect.Effect<R, E, A>): Eff
2600
2575
  )
2601
2576
 
2602
2577
  /* @internal */
2603
- export const tagMetricsScoped = (key: string, value: string): Effect.Effect<Scope.Scope, never, void> =>
2578
+ export const tagMetricsScoped = (key: string, value: string): Effect.Effect<void, never, Scope.Scope> =>
2604
2579
  labelMetricsScoped([metricLabel.make(key, value)])
2605
2580
 
2606
2581
  /* @internal */
2607
2582
  export const labelMetricsScoped = (
2608
2583
  labels: Iterable<MetricLabel.MetricLabel>
2609
- ): Effect.Effect<Scope.Scope, never, void> =>
2584
+ ): Effect.Effect<void, never, Scope.Scope> =>
2610
2585
  fiberRefLocallyScopedWith(core.currentMetricLabels, (old) => RA.union(old, labels))
2611
2586
 
2612
2587
  /* @internal */
2613
2588
  export const using = dual<
2614
- <A, R2, E2, A2>(
2615
- use: (a: A) => Effect.Effect<R2, E2, A2>
2616
- ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Scope.Scope> | R2, E | E2, A2>,
2617
- <R, E, A, R2, E2, A2>(
2618
- self: Effect.Effect<R, E, A>,
2619
- use: (a: A) => Effect.Effect<R2, E2, A2>
2620
- ) => Effect.Effect<Exclude<R, Scope.Scope> | R2, E | E2, A2>
2589
+ <A, A2, E2, R2>(
2590
+ use: (a: A) => Effect.Effect<A2, E2, R2>
2591
+ ) => <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2, E | E2, Exclude<R, Scope.Scope> | R2>,
2592
+ <A, E, R, A2, E2, R2>(
2593
+ self: Effect.Effect<A, E, R>,
2594
+ use: (a: A) => Effect.Effect<A2, E2, R2>
2595
+ ) => Effect.Effect<A2, E | E2, Exclude<R, Scope.Scope> | R2>
2621
2596
  >(2, (self, use) =>
2622
2597
  core.acquireUseRelease(
2623
2598
  scopeMake(),
@@ -2627,21 +2602,21 @@ export const using = dual<
2627
2602
 
2628
2603
  /** @internal */
2629
2604
  export const validate = dual<
2630
- <R1, E1, B>(
2631
- that: Effect.Effect<R1, E1, B>,
2605
+ <B, E1, R1>(
2606
+ that: Effect.Effect<B, E1, R1>,
2632
2607
  options?: {
2633
2608
  readonly concurrent?: boolean | undefined
2634
2609
  readonly batching?: boolean | "inherit" | undefined
2635
2610
  }
2636
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, E | E1, [A, B]>,
2637
- <R, E, A, R1, E1, B>(
2638
- self: Effect.Effect<R, E, A>,
2639
- that: Effect.Effect<R1, E1, B>,
2611
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<[A, B], E | E1, R | R1>,
2612
+ <A, E, R, B, E1, R1>(
2613
+ self: Effect.Effect<A, E, R>,
2614
+ that: Effect.Effect<B, E1, R1>,
2640
2615
  options?: {
2641
2616
  readonly concurrent?: boolean | undefined
2642
2617
  readonly batching?: boolean | "inherit" | undefined
2643
2618
  }
2644
- ) => Effect.Effect<R | R1, E | E1, [A, B]>
2619
+ ) => Effect.Effect<[A, B], E | E1, R | R1>
2645
2620
  >(
2646
2621
  (args) => core.isEffect(args[1]),
2647
2622
  (self, that, options) => validateWith(self, that, (a, b) => [a, b], options)
@@ -2649,23 +2624,23 @@ export const validate = dual<
2649
2624
 
2650
2625
  /** @internal */
2651
2626
  export const validateWith = dual<
2652
- <A, R1, E1, B, C>(
2653
- that: Effect.Effect<R1, E1, B>,
2627
+ <B, E1, R1, A, C>(
2628
+ that: Effect.Effect<B, E1, R1>,
2654
2629
  f: (a: A, b: B) => C,
2655
2630
  options?: {
2656
2631
  readonly concurrent?: boolean | undefined
2657
2632
  readonly batching?: boolean | "inherit" | undefined
2658
2633
  }
2659
- ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, E | E1, C>,
2660
- <R, E, A, R1, E1, B, C>(
2661
- self: Effect.Effect<R, E, A>,
2662
- that: Effect.Effect<R1, E1, B>,
2634
+ ) => <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<C, E | E1, R | R1>,
2635
+ <A, E, R, B, E1, R1, C>(
2636
+ self: Effect.Effect<A, E, R>,
2637
+ that: Effect.Effect<B, E1, R1>,
2663
2638
  f: (a: A, b: B) => C,
2664
2639
  options?: {
2665
2640
  readonly concurrent?: boolean | undefined
2666
2641
  readonly batching?: boolean | "inherit" | undefined
2667
2642
  }
2668
- ) => Effect.Effect<R | R1, E | E1, C>
2643
+ ) => Effect.Effect<C, E | E1, R | R1>
2669
2644
  >((args) => core.isEffect(args[1]), (self, that, f, options) =>
2670
2645
  core.flatten(zipWithOptions(
2671
2646
  core.exit(self),
@@ -2680,13 +2655,13 @@ export const validateWith = dual<
2680
2655
 
2681
2656
  /* @internal */
2682
2657
  export const validateAllPar = dual<
2683
- <R, E, A, B>(
2684
- f: (a: A) => Effect.Effect<R, E, B>
2685
- ) => (elements: Iterable<A>) => Effect.Effect<R, Array<E>, Array<B>>,
2686
- <R, E, A, B>(
2658
+ <A, B, E, R>(
2659
+ f: (a: A) => Effect.Effect<B, E, R>
2660
+ ) => (elements: Iterable<A>) => Effect.Effect<Array<B>, Array<E>, R>,
2661
+ <A, B, E, R>(
2687
2662
  elements: Iterable<A>,
2688
- f: (a: A) => Effect.Effect<R, E, B>
2689
- ) => Effect.Effect<R, Array<E>, Array<B>>
2663
+ f: (a: A) => Effect.Effect<B, E, R>
2664
+ ) => Effect.Effect<Array<B>, Array<E>, R>
2690
2665
  >(2, (elements, f) =>
2691
2666
  core.flatMap(
2692
2667
  partition(elements, f),
@@ -2698,10 +2673,10 @@ export const validateAllPar = dual<
2698
2673
 
2699
2674
  /* @internal */
2700
2675
  export const validateAllParDiscard = dual<
2701
- <R, E, A, B>(
2702
- f: (a: A) => Effect.Effect<R, E, B>
2703
- ) => (elements: Iterable<A>) => Effect.Effect<R, Array<E>, void>,
2704
- <R, E, A, B>(elements: Iterable<A>, f: (a: A) => Effect.Effect<R, E, B>) => Effect.Effect<R, Array<E>, void>
2676
+ <A, B, E, R>(
2677
+ f: (a: A) => Effect.Effect<B, E, R>
2678
+ ) => (elements: Iterable<A>) => Effect.Effect<void, Array<E>, R>,
2679
+ <A, B, E, R>(elements: Iterable<A>, f: (a: A) => Effect.Effect<B, E, R>) => Effect.Effect<void, Array<E>, R>
2705
2680
  >(2, (elements, f) =>
2706
2681
  core.flatMap(
2707
2682
  partition(elements, f),
@@ -2713,14 +2688,14 @@ export const validateAllParDiscard = dual<
2713
2688
 
2714
2689
  /* @internal */
2715
2690
  export const validateFirst = dual<
2716
- <R, E, A, B>(f: (a: A, i: number) => Effect.Effect<R, E, B>, options?: {
2691
+ <A, B, E, R>(f: (a: A, i: number) => Effect.Effect<B, E, R>, options?: {
2717
2692
  readonly concurrency?: Concurrency | undefined
2718
2693
  readonly batching?: boolean | "inherit" | undefined
2719
- }) => (elements: Iterable<A>) => Effect.Effect<R, Array<E>, B>,
2720
- <R, E, A, B>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, B>, options?: {
2694
+ }) => (elements: Iterable<A>) => Effect.Effect<B, Array<E>, R>,
2695
+ <A, B, E, R>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>, options?: {
2721
2696
  readonly concurrency?: Concurrency | undefined
2722
2697
  readonly batching?: boolean | "inherit" | undefined
2723
- }) => Effect.Effect<R, Array<E>, B>
2698
+ }) => Effect.Effect<B, Array<E>, R>
2724
2699
  >(
2725
2700
  (args) => Predicate.isIterable(args[0]),
2726
2701
  (elements, f, options) => core.flip(forEach(elements, (a, i) => core.flip(f(a, i)), options))
@@ -2735,9 +2710,9 @@ export const withConfigProviderScoped = (value: ConfigProvider) =>
2735
2710
  fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(configProviderTag, value))
2736
2711
 
2737
2712
  /* @internal */
2738
- export const withEarlyRelease = <R, E, A>(
2739
- self: Effect.Effect<R, E, A>
2740
- ): Effect.Effect<R | Scope.Scope, E, [Effect.Effect<never, never, void>, A]> =>
2713
+ export const withEarlyRelease = <A, E, R>(
2714
+ self: Effect.Effect<A, E, R>
2715
+ ): Effect.Effect<[Effect.Effect<void>, A], E, R | Scope.Scope> =>
2741
2716
  scopeWith((parent) =>
2742
2717
  core.flatMap(core.scopeFork(parent, executionStrategy.sequential), (child) =>
2743
2718
  pipe(
@@ -2752,23 +2727,23 @@ export const withEarlyRelease = <R, E, A>(
2752
2727
 
2753
2728
  /** @internal */
2754
2729
  export const zipOptions = dual<
2755
- <R2, E2, A2>(
2756
- that: Effect.Effect<R2, E2, A2>,
2730
+ <A2, E2, R2>(
2731
+ that: Effect.Effect<A2, E2, R2>,
2757
2732
  options?: {
2758
2733
  readonly concurrent?: boolean | undefined
2759
2734
  readonly batching?: boolean | "inherit" | undefined
2760
2735
  }
2761
- ) => <R, E, A>(
2762
- self: Effect.Effect<R, E, A>
2763
- ) => Effect.Effect<R | R2, E | E2, [A, A2]>,
2764
- <R, E, A, R2, E2, A2>(
2765
- self: Effect.Effect<R, E, A>,
2766
- that: Effect.Effect<R2, E2, A2>,
2736
+ ) => <A, E, R>(
2737
+ self: Effect.Effect<A, E, R>
2738
+ ) => Effect.Effect<[A, A2], E | E2, R | R2>,
2739
+ <A, E, R, A2, E2, R2>(
2740
+ self: Effect.Effect<A, E, R>,
2741
+ that: Effect.Effect<A2, E2, R2>,
2767
2742
  options?: {
2768
2743
  readonly concurrent?: boolean | undefined
2769
2744
  readonly batching?: boolean | "inherit" | undefined
2770
2745
  }
2771
- ) => Effect.Effect<R | R2, E | E2, [A, A2]>
2746
+ ) => Effect.Effect<[A, A2], E | E2, R | R2>
2772
2747
  >((args) => core.isEffect(args[1]), (
2773
2748
  self,
2774
2749
  that,
@@ -2777,77 +2752,82 @@ export const zipOptions = dual<
2777
2752
 
2778
2753
  /** @internal */
2779
2754
  export const zipLeftOptions = dual<
2780
- <R2, E2, A2>(
2781
- that: Effect.Effect<R2, E2, A2>,
2755
+ <A2, E2, R2>(
2756
+ that: Effect.Effect<A2, E2, R2>,
2782
2757
  options?: {
2783
2758
  readonly concurrent?: boolean | undefined
2784
2759
  readonly batching?: boolean | "inherit" | undefined
2785
2760
  }
2786
- ) => <R, E, A>(
2787
- self: Effect.Effect<R, E, A>
2788
- ) => Effect.Effect<R | R2, E | E2, A>,
2789
- <R, E, A, R2, E2, A2>(
2790
- self: Effect.Effect<R, E, A>,
2791
- that: Effect.Effect<R2, E2, A2>,
2761
+ ) => <A, E, R>(
2762
+ self: Effect.Effect<A, E, R>
2763
+ ) => Effect.Effect<A, E | E2, R | R2>,
2764
+ <A, E, R, A2, E2, R2>(
2765
+ self: Effect.Effect<A, E, R>,
2766
+ that: Effect.Effect<A2, E2, R2>,
2792
2767
  options?: {
2793
2768
  readonly concurrent?: boolean | undefined
2794
2769
  readonly batching?: boolean | "inherit" | undefined
2795
2770
  }
2796
- ) => Effect.Effect<R | R2, E | E2, A>
2771
+ ) => Effect.Effect<A, E | E2, R | R2>
2797
2772
  >(
2798
2773
  (args) => core.isEffect(args[1]),
2799
2774
  (self, that, options) => zipWithOptions(self, that, (a, _) => a, options)
2800
2775
  )
2801
2776
 
2802
2777
  /** @internal */
2803
- export const zipRightOptions = dual<
2804
- <R2, E2, A2>(
2805
- that: Effect.Effect<R2, E2, A2>,
2778
+ export const zipRightOptions: {
2779
+ <A2, E2, R2>(
2780
+ that: Effect.Effect<A2, E2, R2>,
2806
2781
  options?: {
2807
2782
  readonly concurrent?: boolean | undefined
2808
2783
  readonly batching?: boolean | "inherit" | undefined
2809
2784
  }
2810
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A2>,
2811
- <R, E, A, R2, E2, A2>(
2812
- self: Effect.Effect<R, E, A>,
2813
- that: Effect.Effect<R2, E2, A2>,
2785
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2, E2 | E, R2 | R>
2786
+ <A, E, R, A2, E2, R2>(
2787
+ self: Effect.Effect<A, E, R>,
2788
+ that: Effect.Effect<A2, E2, R2>,
2814
2789
  options?: {
2815
2790
  readonly concurrent?: boolean | undefined
2816
2791
  readonly batching?: boolean | "inherit" | undefined
2817
2792
  }
2818
- ) => Effect.Effect<R | R2, E | E2, A2>
2819
- >((args) => core.isEffect(args[1]), (self, that, options) => zipWithOptions(self, that, (_, b) => b, options))
2793
+ ): Effect.Effect<A2, E2 | E, R2 | R>
2794
+ } = dual((args) => core.isEffect(args[1]), <A, E, R, A2, E2, R2>(
2795
+ self: Effect.Effect<A, E, R>,
2796
+ that: Effect.Effect<A2, E2, R2>,
2797
+ options: {
2798
+ readonly concurrent?: boolean | undefined
2799
+ readonly batching?: boolean | "inherit" | undefined
2800
+ }
2801
+ ): Effect.Effect<A2, E2 | E, R2 | R> => zipWithOptions(self, that, (_, b) => b, options))
2820
2802
 
2821
2803
  /** @internal */
2822
- export const zipWithOptions = dual<
2823
- <R2, E2, A2, A, B>(
2824
- that: Effect.Effect<R2, E2, A2>,
2804
+ export const zipWithOptions: {
2805
+ <A2, E2, R2, A, B>(
2806
+ that: Effect.Effect<A2, E2, R2>,
2825
2807
  f: (a: A, b: A2) => B,
2826
2808
  options?: {
2827
2809
  readonly concurrent?: boolean | undefined
2828
2810
  readonly batching?: boolean | "inherit" | undefined
2829
2811
  }
2830
- ) => <R, E>(
2831
- self: Effect.Effect<R, E, A>
2832
- ) => Effect.Effect<R | R2, E | E2, B>,
2833
- <R, E, A, R2, E2, A2, B>(
2834
- self: Effect.Effect<R, E, A>,
2835
- that: Effect.Effect<R2, E2, A2>,
2812
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E2 | E, R2 | R>
2813
+ <A, E, R, A2, E2, R2, B>(
2814
+ self: Effect.Effect<A, E, R>,
2815
+ that: Effect.Effect<A2, E2, R2>,
2836
2816
  f: (a: A, b: A2) => B,
2837
2817
  options?: {
2838
2818
  readonly concurrent?: boolean | undefined
2839
2819
  readonly batching?: boolean | "inherit" | undefined
2840
2820
  }
2841
- ) => Effect.Effect<R | R2, E | E2, B>
2842
- >((args) => core.isEffect(args[1]), <R, E, A, R2, E2, A2, B>(
2843
- self: Effect.Effect<R, E, A>,
2844
- that: Effect.Effect<R2, E2, A2>,
2821
+ ): Effect.Effect<B, E2 | E, R2 | R>
2822
+ } = dual((args) => core.isEffect(args[1]), <A, E, R, A2, E2, R2, B>(
2823
+ self: Effect.Effect<A, E, R>,
2824
+ that: Effect.Effect<A2, E2, R2>,
2845
2825
  f: (a: A, b: A2) => B,
2846
2826
  options?: {
2847
2827
  readonly concurrent?: boolean | undefined
2848
2828
  readonly batching?: boolean | "inherit" | undefined
2849
2829
  }
2850
- ): Effect.Effect<R | R2, E | E2, B> =>
2830
+ ): Effect.Effect<B, E2 | E, R2 | R> =>
2851
2831
  core.map(
2852
2832
  all([self, that], {
2853
2833
  concurrency: options?.concurrent ? 2 : 1,
@@ -2859,7 +2839,7 @@ export const zipWithOptions = dual<
2859
2839
  /* @internal */
2860
2840
  export const withRuntimeFlagsScoped = (
2861
2841
  update: RuntimeFlagsPatch.RuntimeFlagsPatch
2862
- ): Effect.Effect<Scope.Scope, never, void> => {
2842
+ ): Effect.Effect<void, never, Scope.Scope> => {
2863
2843
  if (update === RuntimeFlagsPatch.empty) {
2864
2844
  return core.unit
2865
2845
  }
@@ -2885,7 +2865,7 @@ export const releaseMapReleaseAll = (
2885
2865
  strategy: ExecutionStrategy.ExecutionStrategy,
2886
2866
  exit: Exit.Exit<unknown, unknown>
2887
2867
  ) =>
2888
- (self: core.ReleaseMap): Effect.Effect<never, never, void> =>
2868
+ (self: core.ReleaseMap): Effect.Effect<void> =>
2889
2869
  core.suspend(() => {
2890
2870
  switch (self.state._tag) {
2891
2871
  case "Exited": {
@@ -2936,7 +2916,7 @@ export const releaseMapReleaseAll = (
2936
2916
  // circular with Scope
2937
2917
 
2938
2918
  /** @internal */
2939
- export const scopeTag = Context.Tag<Scope.Scope>(core.ScopeTypeId)
2919
+ export const scopeTag = Context.GenericTag<Scope.Scope>("effect/Scope")
2940
2920
 
2941
2921
  /* @internal */
2942
2922
  export const scope: Effect.Effect<Scope.Scope, never, Scope.Scope> = scopeTag
@@ -2944,7 +2924,7 @@ export const scope: Effect.Effect<Scope.Scope, never, Scope.Scope> = scopeTag
2944
2924
  /* @internal */
2945
2925
  export const scopeMake = (
2946
2926
  strategy: ExecutionStrategy.ExecutionStrategy = executionStrategy.sequential
2947
- ): Effect.Effect<never, never, Scope.Scope.Closeable> =>
2927
+ ): Effect.Effect<Scope.Scope.Closeable> =>
2948
2928
  core.map(core.releaseMapMake, (rm): Scope.Scope.Closeable => ({
2949
2929
  [core.ScopeTypeId]: core.ScopeTypeId,
2950
2930
  [core.CloseableScopeTypeId]: core.CloseableScopeTypeId,
@@ -2971,12 +2951,12 @@ export const scopeMake = (
2971
2951
 
2972
2952
  /* @internal */
2973
2953
  export const scopeExtend = dual<
2974
- (scope: Scope.Scope) => <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Scope.Scope>, E, A>,
2975
- <R, E, A>(effect: Effect.Effect<R, E, A>, scope: Scope.Scope) => Effect.Effect<Exclude<R, Scope.Scope>, E, A>
2954
+ (scope: Scope.Scope) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Scope.Scope>>,
2955
+ <A, E, R>(effect: Effect.Effect<A, E, R>, scope: Scope.Scope) => Effect.Effect<A, E, Exclude<R, Scope.Scope>>
2976
2956
  >(
2977
2957
  2,
2978
- <R, E, A>(effect: Effect.Effect<R, E, A>, scope: Scope.Scope) =>
2979
- core.mapInputContext<Exclude<R, Scope.Scope>, R, E, A>(
2958
+ <A, E, R>(effect: Effect.Effect<A, E, R>, scope: Scope.Scope) =>
2959
+ core.mapInputContext<A, E, R, Exclude<R, Scope.Scope>>(
2980
2960
  effect,
2981
2961
  // @ts-expect-error
2982
2962
  Context.merge(Context.make(scopeTag, scope))
@@ -2987,11 +2967,11 @@ export const scopeExtend = dual<
2987
2967
  export const scopeUse = dual<
2988
2968
  (
2989
2969
  scope: Scope.Scope.Closeable
2990
- ) => <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Scope.Scope>, E, A>,
2991
- <R, E, A>(
2992
- effect: Effect.Effect<R, E, A>,
2970
+ ) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Scope.Scope>>,
2971
+ <A, E, R>(
2972
+ effect: Effect.Effect<A, E, R>,
2993
2973
  scope: Scope.Scope.Closeable
2994
- ) => Effect.Effect<Exclude<R, Scope.Scope>, E, A>
2974
+ ) => Effect.Effect<A, E, Exclude<R, Scope.Scope>>
2995
2975
  >(2, (effect, scope) =>
2996
2976
  pipe(
2997
2977
  effect,
@@ -3014,8 +2994,8 @@ export const fiberRefUnsafeMakeSupervisor = (
3014
2994
 
3015
2995
  /* @internal */
3016
2996
  export const fiberRefLocallyScoped = dual<
3017
- <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<Scope.Scope, never, void>,
3018
- <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<Scope.Scope, never, void>
2997
+ <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void, never, Scope.Scope>,
2998
+ <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<void, never, Scope.Scope>
3019
2999
  >(2, (self, value) =>
3020
3000
  core.asUnit(
3021
3001
  acquireRelease(
@@ -3029,8 +3009,8 @@ export const fiberRefLocallyScoped = dual<
3029
3009
 
3030
3010
  /* @internal */
3031
3011
  export const fiberRefLocallyScopedWith = dual<
3032
- <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<Scope.Scope, never, void>,
3033
- <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<Scope.Scope, never, void>
3012
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void, never, Scope.Scope>,
3013
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<void, never, Scope.Scope>
3034
3014
  >(2, (self, f) => core.fiberRefGetWith(self, (a) => fiberRefLocallyScoped(self, f(a))))
3035
3015
 
3036
3016
  /* @internal */
@@ -3040,13 +3020,13 @@ export const fiberRefMake = <A>(
3040
3020
  readonly fork?: ((a: A) => A) | undefined
3041
3021
  readonly join?: ((left: A, right: A) => A) | undefined
3042
3022
  }
3043
- ): Effect.Effect<Scope.Scope, never, FiberRef.FiberRef<A>> =>
3023
+ ): Effect.Effect<FiberRef.FiberRef<A>, never, Scope.Scope> =>
3044
3024
  fiberRefMakeWith(() => core.fiberRefUnsafeMake(initial, options))
3045
3025
 
3046
3026
  /* @internal */
3047
3027
  export const fiberRefMakeWith = <Value>(
3048
3028
  ref: LazyArg<FiberRef.FiberRef<Value>>
3049
- ): Effect.Effect<Scope.Scope, never, FiberRef.FiberRef<Value>> =>
3029
+ ): Effect.Effect<FiberRef.FiberRef<Value>, never, Scope.Scope> =>
3050
3030
  acquireRelease(
3051
3031
  core.tap(core.sync(ref), (ref) => core.fiberRefUpdate(ref, identity)),
3052
3032
  (fiberRef) => core.fiberRefDelete(fiberRef)
@@ -3055,13 +3035,13 @@ export const fiberRefMakeWith = <Value>(
3055
3035
  /* @internal */
3056
3036
  export const fiberRefMakeContext = <A>(
3057
3037
  initial: Context.Context<A>
3058
- ): Effect.Effect<Scope.Scope, never, FiberRef.FiberRef<Context.Context<A>>> =>
3038
+ ): Effect.Effect<FiberRef.FiberRef<Context.Context<A>>, never, Scope.Scope> =>
3059
3039
  fiberRefMakeWith(() => core.fiberRefUnsafeMakeContext(initial))
3060
3040
 
3061
3041
  /* @internal */
3062
3042
  export const fiberRefMakeRuntimeFlags = (
3063
3043
  initial: RuntimeFlags.RuntimeFlags
3064
- ): Effect.Effect<Scope.Scope, never, FiberRef.FiberRef<RuntimeFlags.RuntimeFlags>> =>
3044
+ ): Effect.Effect<FiberRef.FiberRef<RuntimeFlags.RuntimeFlags>, never, Scope.Scope> =>
3065
3045
  fiberRefMakeWith(() => core.fiberRefUnsafeMakeRuntimeFlags(initial))
3066
3046
 
3067
3047
  /** @internal */
@@ -3077,11 +3057,11 @@ export const currentSupervisor: FiberRef.FiberRef<Supervisor.Supervisor<any>> =
3077
3057
  // circular with Fiber
3078
3058
 
3079
3059
  /* @internal */
3080
- export const fiberAwaitAll = (fibers: Iterable<Fiber.Fiber<any, any>>): Effect.Effect<never, never, void> =>
3060
+ export const fiberAwaitAll = (fibers: Iterable<Fiber.Fiber<any, any>>): Effect.Effect<void> =>
3081
3061
  core.asUnit(internalFiber._await(fiberAll(fibers)))
3082
3062
 
3083
3063
  /** @internal */
3084
- export const fiberAll = <E, A>(fibers: Iterable<Fiber.Fiber<E, A>>): Fiber.Fiber<E, Array<A>> => ({
3064
+ export const fiberAll = <A, E>(fibers: Iterable<Fiber.Fiber<A, E>>): Fiber.Fiber<Array<A>, E> => ({
3085
3065
  [internalFiber.FiberTypeId]: internalFiber.fiberVariance,
3086
3066
  id: () => RA.fromIterable(fibers).reduce((id, fiber) => FiberId.combine(id, fiber.id()), FiberId.none),
3087
3067
  await: core.exit(forEachParUnbounded(fibers, (fiber) => core.flatten(fiber.await), false)),
@@ -3090,7 +3070,7 @@ export const fiberAll = <E, A>(fibers: Iterable<Fiber.Fiber<E, A>>): Fiber.Fiber
3090
3070
  poll: core.map(
3091
3071
  core.forEachSequential(fibers, (fiber) => fiber.poll),
3092
3072
  RA.reduceRight(
3093
- Option.some<Exit.Exit<E, Array<A>>>(core.exitSucceed(new Array())),
3073
+ Option.some<Exit.Exit<Array<A>, E>>(core.exitSucceed(new Array())),
3094
3074
  (optionB, optionA) => {
3095
3075
  switch (optionA._tag) {
3096
3076
  case "None": {
@@ -3122,15 +3102,15 @@ export const fiberAll = <E, A>(fibers: Iterable<Fiber.Fiber<E, A>>): Fiber.Fiber
3122
3102
  })
3123
3103
 
3124
3104
  /* @internal */
3125
- export const fiberInterruptFork = <E, A>(self: Fiber.Fiber<E, A>): Effect.Effect<never, never, void> =>
3105
+ export const fiberInterruptFork = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<void> =>
3126
3106
  core.asUnit(forkDaemon(core.interruptFiber(self)))
3127
3107
 
3128
3108
  /* @internal */
3129
- export const fiberJoinAll = <E, A>(fibers: Iterable<Fiber.Fiber<E, A>>): Effect.Effect<never, E, void> =>
3109
+ export const fiberJoinAll = <A, E>(fibers: Iterable<Fiber.Fiber<A, E>>): Effect.Effect<void, E> =>
3130
3110
  core.asUnit(internalFiber.join(fiberAll(fibers)))
3131
3111
 
3132
3112
  /* @internal */
3133
- export const fiberScoped = <E, A>(self: Fiber.Fiber<E, A>): Effect.Effect<Scope.Scope, never, Fiber.Fiber<E, A>> =>
3113
+ export const fiberScoped = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<Fiber.Fiber<A, E>, never, Scope.Scope> =>
3134
3114
  acquireRelease(core.succeed(self), core.interruptFiber)
3135
3115
 
3136
3116
  //
@@ -3139,29 +3119,22 @@ export const fiberScoped = <E, A>(self: Fiber.Fiber<E, A>): Effect.Effect<Scope.
3139
3119
 
3140
3120
  /** @internal */
3141
3121
  export const raceWith = dual<
3142
- <E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3>(
3143
- other: Effect.Effect<R1, E1, A1>,
3122
+ <A1, E1, R1, E, A, A2, E2, R2, A3, E3, R3>(
3123
+ other: Effect.Effect<A1, E1, R1>,
3144
3124
  options: {
3145
- readonly onSelfDone: (exit: Exit.Exit<E, A>, fiber: Fiber.Fiber<E1, A1>) => Effect.Effect<R2, E2, A2>
3146
- readonly onOtherDone: (exit: Exit.Exit<E1, A1>, fiber: Fiber.Fiber<E, A>) => Effect.Effect<R3, E3, A3>
3125
+ readonly onSelfDone: (exit: Exit.Exit<A, E>, fiber: Fiber.Fiber<A1, E1>) => Effect.Effect<A2, E2, R2>
3126
+ readonly onOtherDone: (exit: Exit.Exit<A1, E1>, fiber: Fiber.Fiber<A, E>) => Effect.Effect<A3, E3, R3>
3147
3127
  }
3148
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1 | R2 | R3, E2 | E3, A2 | A3>,
3149
- <R, E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3>(
3150
- self: Effect.Effect<R, E, A>,
3151
- other: Effect.Effect<R1, E1, A1>,
3128
+ ) => <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R | R1 | R2 | R3>,
3129
+ <A, E, R, A1, E1, R1, A2, E2, R2, A3, E3, R3>(
3130
+ self: Effect.Effect<A, E, R>,
3131
+ other: Effect.Effect<A1, E1, R1>,
3152
3132
  options: {
3153
- readonly onSelfDone: (exit: Exit.Exit<E, A>, fiber: Fiber.Fiber<E1, A1>) => Effect.Effect<R2, E2, A2>
3154
- readonly onOtherDone: (exit: Exit.Exit<E1, A1>, fiber: Fiber.Fiber<E, A>) => Effect.Effect<R3, E3, A3>
3133
+ readonly onSelfDone: (exit: Exit.Exit<A, E>, fiber: Fiber.Fiber<A1, E1>) => Effect.Effect<A2, E2, R2>
3134
+ readonly onOtherDone: (exit: Exit.Exit<A1, E1>, fiber: Fiber.Fiber<A, E>) => Effect.Effect<A3, E3, R3>
3155
3135
  }
3156
- ) => Effect.Effect<R | R1 | R2 | R3, E2 | E3, A2 | A3>
3157
- >(3, <R, E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3>(
3158
- self: Effect.Effect<R, E, A>,
3159
- other: Effect.Effect<R1, E1, A1>,
3160
- options: {
3161
- readonly onSelfDone: (exit: Exit.Exit<E, A>, fiber: Fiber.Fiber<E1, A1>) => Effect.Effect<R2, E2, A2>
3162
- readonly onOtherDone: (exit: Exit.Exit<E1, A1>, fiber: Fiber.Fiber<E, A>) => Effect.Effect<R3, E3, A3>
3163
- }
3164
- ) =>
3136
+ ) => Effect.Effect<A2 | A3, E2 | E3, R | R1 | R2 | R3>
3137
+ >(3, (self, other, options) =>
3165
3138
  raceFibersWith(self, other, {
3166
3139
  onSelfWin: (winner, loser) =>
3167
3140
  core.flatMap(winner.await, (exit) => {
@@ -3194,7 +3167,7 @@ export const raceWith = dual<
3194
3167
  }))
3195
3168
 
3196
3169
  /** @internal */
3197
- export const disconnect = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, A> =>
3170
+ export const disconnect = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
3198
3171
  core.uninterruptibleMask((restore) =>
3199
3172
  core.fiberIdWith((fiberId) =>
3200
3173
  core.flatMap(forkDaemon(restore(self)), (fiber) =>
@@ -3207,15 +3180,15 @@ export const disconnect = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect
3207
3180
 
3208
3181
  /** @internal */
3209
3182
  export const race = dual<
3210
- <R2, E2, A2>(
3211
- that: Effect.Effect<R2, E2, A2>
3212
- ) => <R, E, A>(
3213
- self: Effect.Effect<R, E, A>
3214
- ) => Effect.Effect<R | R2, E | E2, A | A2>,
3215
- <R, E, A, R2, E2, A2>(
3216
- self: Effect.Effect<R, E, A>,
3217
- that: Effect.Effect<R2, E2, A2>
3218
- ) => Effect.Effect<R | R2, E | E2, A | A2>
3183
+ <A2, E2, R2>(
3184
+ that: Effect.Effect<A2, E2, R2>
3185
+ ) => <A, E, R>(
3186
+ self: Effect.Effect<A, E, R>
3187
+ ) => Effect.Effect<A | A2, E | E2, R | R2>,
3188
+ <A, E, R, A2, E2, R2>(
3189
+ self: Effect.Effect<A, E, R>,
3190
+ that: Effect.Effect<A2, E2, R2>
3191
+ ) => Effect.Effect<A | A2, E | E2, R | R2>
3219
3192
  >(
3220
3193
  2,
3221
3194
  (self, that) =>
@@ -3255,77 +3228,69 @@ export const race = dual<
3255
3228
 
3256
3229
  /** @internal */
3257
3230
  export const raceFibersWith = dual<
3258
- <E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3>(
3259
- other: Effect.Effect<R1, E1, A1>,
3231
+ <A1, E1, R1, E, A, A2, E2, R2, A3, E3, R3>(
3232
+ other: Effect.Effect<A1, E1, R1>,
3260
3233
  options: {
3261
3234
  readonly onSelfWin: (
3262
- winner: Fiber.RuntimeFiber<E, A>,
3263
- loser: Fiber.RuntimeFiber<E1, A1>
3264
- ) => Effect.Effect<R2, E2, A2>
3235
+ winner: Fiber.RuntimeFiber<A, E>,
3236
+ loser: Fiber.RuntimeFiber<A1, E1>
3237
+ ) => Effect.Effect<A2, E2, R2>
3265
3238
  readonly onOtherWin: (
3266
- winner: Fiber.RuntimeFiber<E1, A1>,
3267
- loser: Fiber.RuntimeFiber<E, A>
3268
- ) => Effect.Effect<R3, E3, A3>
3239
+ winner: Fiber.RuntimeFiber<A1, E1>,
3240
+ loser: Fiber.RuntimeFiber<A, E>
3241
+ ) => Effect.Effect<A3, E3, R3>
3269
3242
  readonly selfScope?: fiberScope.FiberScope | undefined
3270
3243
  readonly otherScope?: fiberScope.FiberScope | undefined
3271
3244
  }
3272
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<
3273
- R | R1 | R2 | R3,
3274
- E2 | E3,
3275
- A2 | A3
3276
- >,
3277
- <R, E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3>(
3278
- self: Effect.Effect<R, E, A>,
3279
- other: Effect.Effect<R1, E1, A1>,
3245
+ ) => <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R | R1 | R2 | R3>,
3246
+ <A, E, R, A1, E1, R1, A2, E2, R2, A3, E3, R3>(
3247
+ self: Effect.Effect<A, E, R>,
3248
+ other: Effect.Effect<A1, E1, R1>,
3280
3249
  options: {
3281
3250
  readonly onSelfWin: (
3282
- winner: Fiber.RuntimeFiber<E, A>,
3283
- loser: Fiber.RuntimeFiber<E1, A1>
3284
- ) => Effect.Effect<R2, E2, A2>
3251
+ winner: Fiber.RuntimeFiber<A, E>,
3252
+ loser: Fiber.RuntimeFiber<A1, E1>
3253
+ ) => Effect.Effect<A2, E2, R2>
3285
3254
  readonly onOtherWin: (
3286
- winner: Fiber.RuntimeFiber<E1, A1>,
3287
- loser: Fiber.RuntimeFiber<E, A>
3288
- ) => Effect.Effect<R3, E3, A3>
3255
+ winner: Fiber.RuntimeFiber<A1, E1>,
3256
+ loser: Fiber.RuntimeFiber<A, E>
3257
+ ) => Effect.Effect<A3, E3, R3>
3289
3258
  readonly selfScope?: fiberScope.FiberScope | undefined
3290
3259
  readonly otherScope?: fiberScope.FiberScope | undefined
3291
3260
  }
3292
- ) => Effect.Effect<
3293
- R | R1 | R2 | R3,
3294
- E2 | E3,
3295
- A2 | A3
3296
- >
3297
- >(3, <R, E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3>(
3298
- self: Effect.Effect<R, E, A>,
3299
- other: Effect.Effect<R1, E1, A1>,
3261
+ ) => Effect.Effect<A2 | A3, E2 | E3, R | R1 | R2 | R3>
3262
+ >(3, <A, E, R, A1, E1, R1, A2, E2, R2, A3, E3, R3>(
3263
+ self: Effect.Effect<A, E, R>,
3264
+ other: Effect.Effect<A1, E1, R1>,
3300
3265
  options: {
3301
3266
  readonly onSelfWin: (
3302
- winner: Fiber.RuntimeFiber<E, A>,
3303
- loser: Fiber.RuntimeFiber<E1, A1>
3304
- ) => Effect.Effect<R2, E2, A2>
3267
+ winner: Fiber.RuntimeFiber<A, E>,
3268
+ loser: Fiber.RuntimeFiber<A1, E1>
3269
+ ) => Effect.Effect<A2, E2, R2>
3305
3270
  readonly onOtherWin: (
3306
- winner: Fiber.RuntimeFiber<E1, A1>,
3307
- loser: Fiber.RuntimeFiber<E, A>
3308
- ) => Effect.Effect<R3, E3, A3>
3271
+ winner: Fiber.RuntimeFiber<A1, E1>,
3272
+ loser: Fiber.RuntimeFiber<A, E>
3273
+ ) => Effect.Effect<A3, E3, R3>
3309
3274
  readonly selfScope?: fiberScope.FiberScope | undefined
3310
3275
  readonly otherScope?: fiberScope.FiberScope | undefined
3311
3276
  }
3312
3277
  ) =>
3313
- core.withFiberRuntime<R | R1 | R2 | R3, E2 | E3, A2 | A3>((parentFiber, parentStatus) => {
3278
+ core.withFiberRuntime((parentFiber, parentStatus) => {
3314
3279
  const parentRuntimeFlags = parentStatus.runtimeFlags
3315
3280
  const raceIndicator = MRef.make(true)
3316
- const leftFiber: FiberRuntime<E, A> = unsafeMakeChildFiber(
3281
+ const leftFiber: FiberRuntime<A, E> = unsafeMakeChildFiber(
3317
3282
  self,
3318
3283
  parentFiber,
3319
3284
  parentRuntimeFlags,
3320
3285
  options.selfScope
3321
3286
  )
3322
- const rightFiber: FiberRuntime<E1, A1> = unsafeMakeChildFiber(
3287
+ const rightFiber: FiberRuntime<A1, E1> = unsafeMakeChildFiber(
3323
3288
  other,
3324
3289
  parentFiber,
3325
3290
  parentRuntimeFlags,
3326
3291
  options.otherScope
3327
3292
  )
3328
- return core.async<R | R1 | R2 | R3, E2 | E3, A2 | A3>((cb) => {
3293
+ return core.async((cb) => {
3329
3294
  leftFiber.addObserver(() => completeRace(leftFiber, rightFiber, options.onSelfWin, raceIndicator, cb))
3330
3295
  rightFiber.addObserver(() => completeRace(rightFiber, leftFiber, options.onOtherWin, raceIndicator, cb))
3331
3296
  leftFiber.startFork(self)
@@ -3338,7 +3303,7 @@ const completeRace = <R, R1, R2, E2, A2, R3, E3, A3>(
3338
3303
  loser: Fiber.RuntimeFiber<any, any>,
3339
3304
  cont: (winner: Fiber.RuntimeFiber<any, any>, loser: Fiber.RuntimeFiber<any, any>) => Effect.Effect<any, any, any>,
3340
3305
  ab: MRef.MutableRef<boolean>,
3341
- cb: (_: Effect.Effect<R | R1 | R2 | R3, E2 | E3, A2 | A3>) => void
3306
+ cb: (_: Effect.Effect<A2 | A3, E2 | E3, R | R1 | R2 | R3>) => void
3342
3307
  ): void => {
3343
3308
  if (MRef.compareAndSet(true, false)(ab)) {
3344
3309
  cb(cont(winner, loser))
@@ -3346,40 +3311,38 @@ const completeRace = <R, R1, R2, E2, A2, R3, E3, A3>(
3346
3311
  }
3347
3312
 
3348
3313
  /** @internal */
3349
- export const ensuring = dual<
3350
- <R1, X>(
3351
- finalizer: Effect.Effect<R1, never, X>
3352
- ) => <R, E, A>(
3353
- self: Effect.Effect<R, E, A>
3354
- ) => Effect.Effect<R | R1, E, A>,
3355
- <R, E, A, R1, X>(
3356
- self: Effect.Effect<R, E, A>,
3357
- finalizer: Effect.Effect<R1, never, X>
3358
- ) => Effect.Effect<R | R1, E, A>
3359
- >(2, (self, finalizer) =>
3360
- core.uninterruptibleMask((restore) =>
3361
- core.matchCauseEffect(restore(self), {
3362
- onFailure: (cause1) =>
3363
- core.matchCauseEffect(finalizer, {
3364
- onFailure: (cause2) => core.failCause(internalCause.sequential(cause1, cause2)),
3365
- onSuccess: () => core.failCause(cause1)
3366
- }),
3367
- onSuccess: (a) => core.as(finalizer, a)
3368
- })
3369
- ))
3314
+ export const ensuring: {
3315
+ <X, R1>(
3316
+ finalizer: Effect.Effect<X, never, R1>
3317
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R1 | R>
3318
+ <A, E, R, X, R1>(self: Effect.Effect<A, E, R>, finalizer: Effect.Effect<X, never, R1>): Effect.Effect<A, E, R1 | R>
3319
+ } = dual(
3320
+ 2,
3321
+ <A, E, R, X, R1>(self: Effect.Effect<A, E, R>, finalizer: Effect.Effect<X, never, R1>): Effect.Effect<A, E, R1 | R> =>
3322
+ core.uninterruptibleMask((restore) =>
3323
+ core.matchCauseEffect(restore(self), {
3324
+ onFailure: (cause1) =>
3325
+ core.matchCauseEffect(finalizer, {
3326
+ onFailure: (cause2) => core.failCause(internalCause.sequential(cause1, cause2)),
3327
+ onSuccess: () => core.failCause(cause1)
3328
+ }),
3329
+ onSuccess: (a) => core.as(finalizer, a)
3330
+ })
3331
+ )
3332
+ )
3370
3333
 
3371
3334
  /** @internal */
3372
- export const invokeWithInterrupt: <R, E, A>(
3373
- self: Effect.Effect<R, E, A>,
3335
+ export const invokeWithInterrupt: <A, E, R>(
3336
+ self: Effect.Effect<A, E, R>,
3374
3337
  entries: ReadonlyArray<Entry<unknown>>
3375
- ) => Effect.Effect<R, E, void> = <R, E, A>(dataSource: Effect.Effect<R, E, A>, all: ReadonlyArray<Entry<unknown>>) =>
3338
+ ) => Effect.Effect<void, E, R> = <A, E, R>(self: Effect.Effect<A, E, R>, entries: ReadonlyArray<Entry<unknown>>) =>
3376
3339
  core.fiberIdWith((id) =>
3377
3340
  core.flatMap(
3378
3341
  core.flatMap(
3379
- forkDaemon(core.interruptible(dataSource)),
3342
+ forkDaemon(core.interruptible(self)),
3380
3343
  (processing) =>
3381
- core.async<never, E, void>((cb) => {
3382
- const counts = all.map((_) => _.listeners.count)
3344
+ core.async<void, E>((cb) => {
3345
+ const counts = entries.map((_) => _.listeners.count)
3383
3346
  const checkDone = () => {
3384
3347
  if (counts.every((count) => count === 0)) {
3385
3348
  cleanup.forEach((f) => f())
@@ -3390,7 +3353,7 @@ export const invokeWithInterrupt: <R, E, A>(
3390
3353
  cleanup.forEach((f) => f())
3391
3354
  cb(exit)
3392
3355
  })
3393
- const cleanup = all.map((r, i) => {
3356
+ const cleanup = entries.map((r, i) => {
3394
3357
  const observer = (count: number) => {
3395
3358
  counts[i] = count
3396
3359
  checkDone()
@@ -3406,7 +3369,7 @@ export const invokeWithInterrupt: <R, E, A>(
3406
3369
  ),
3407
3370
  () =>
3408
3371
  core.suspend(() => {
3409
- const residual = all.flatMap((entry) => {
3372
+ const residual = entries.flatMap((entry) => {
3410
3373
  if (!entry.state.completed) {
3411
3374
  return [entry]
3412
3375
  }
@@ -3422,13 +3385,13 @@ export const invokeWithInterrupt: <R, E, A>(
3422
3385
 
3423
3386
  /** @internal */
3424
3387
  export const interruptWhenPossible = dual<
3425
- (all: Iterable<Request<any, any>>) => <R, E, A>(
3426
- self: Effect.Effect<R, E, A>
3427
- ) => Effect.Effect<R, E, void>,
3428
- <R, E, A>(
3429
- self: Effect.Effect<R, E, A>,
3388
+ (all: Iterable<Request<any, any>>) => <A, E, R>(
3389
+ self: Effect.Effect<A, E, R>
3390
+ ) => Effect.Effect<void, E, R>,
3391
+ <A, E, R>(
3392
+ self: Effect.Effect<A, E, R>,
3430
3393
  all: Iterable<Request<any, any>>
3431
- ) => Effect.Effect<R, E, void>
3394
+ ) => Effect.Effect<void, E, R>
3432
3395
  >(2, (self, all) =>
3433
3396
  core.fiberRefGetWith(
3434
3397
  currentRequestMap,
@@ -3451,7 +3414,7 @@ export const makeSpanScoped = (
3451
3414
  readonly root?: boolean | undefined
3452
3415
  readonly context?: Context.Context<never> | undefined
3453
3416
  }
3454
- ): Effect.Effect<Scope.Scope, never, Tracer.Span> =>
3417
+ ): Effect.Effect<Tracer.Span, never, Scope.Scope> =>
3455
3418
  acquireRelease(
3456
3419
  internalEffect.makeSpan(name, options),
3457
3420
  (span, exit) =>
@@ -3462,7 +3425,7 @@ export const makeSpanScoped = (
3462
3425
  )
3463
3426
 
3464
3427
  /* @internal */
3465
- export const withTracerScoped = (value: Tracer.Tracer): Effect.Effect<Scope.Scope, never, void> =>
3428
+ export const withTracerScoped = (value: Tracer.Tracer): Effect.Effect<void, never, Scope.Scope> =>
3466
3429
  fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(tracer.tracerTag, value))
3467
3430
 
3468
3431
  /** @internal */
@@ -3473,14 +3436,14 @@ export const withSpanScoped = dual<
3473
3436
  readonly parent?: Tracer.ParentSpan | undefined
3474
3437
  readonly root?: boolean | undefined
3475
3438
  readonly context?: Context.Context<never> | undefined
3476
- }) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Tracer.ParentSpan> | Scope.Scope, E, A>,
3477
- <R, E, A>(self: Effect.Effect<R, E, A>, name: string, options?: {
3439
+ }) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan> | Scope.Scope>,
3440
+ <A, E, R>(self: Effect.Effect<A, E, R>, name: string, options?: {
3478
3441
  readonly attributes?: Record<string, unknown> | undefined
3479
3442
  readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
3480
3443
  readonly parent?: Tracer.ParentSpan | undefined
3481
3444
  readonly root?: boolean | undefined
3482
3445
  readonly context?: Context.Context<never> | undefined
3483
- }) => Effect.Effect<Exclude<R, Tracer.ParentSpan> | Scope.Scope, E, A>
3446
+ }) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan> | Scope.Scope>
3484
3447
  >(
3485
3448
  (args) => typeof args[0] !== "string",
3486
3449
  (self, name, options) =>