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
@@ -82,10 +82,10 @@ export const makeEffectError = <E>(cause: Cause.Cause<E>): EffectError<E> => ({
82
82
  /**
83
83
  * @internal
84
84
  */
85
- export const blocked = <E, A>(
85
+ export const blocked = <A, E>(
86
86
  blockedRequests: BlockedRequests.RequestBlock,
87
- _continue: Effect.Effect<never, E, A>
88
- ): Effect.Blocked<E, A> => {
87
+ _continue: Effect.Effect<A, E>
88
+ ): Effect.Blocked<A, E> => {
89
89
  const effect = new EffectPrimitive("Blocked") as any
90
90
  effect.i0 = blockedRequests
91
91
  effect.i1 = _continue
@@ -97,7 +97,7 @@ export const blocked = <E, A>(
97
97
  */
98
98
  export const runRequestBlock = (
99
99
  blockedRequests: BlockedRequests.RequestBlock
100
- ): Effect.Effect<never, never, void> => {
100
+ ): Effect.Effect<void> => {
101
101
  const effect = new EffectPrimitive("RunBlocked") as any
102
102
  effect.i0 = blockedRequests
103
103
  return effect
@@ -257,7 +257,7 @@ class EffectPrimitiveSuccess {
257
257
  }
258
258
 
259
259
  /** @internal */
260
- export type Op<Tag extends string, Body = {}> = Effect.Effect<never, never, never> & Body & {
260
+ export type Op<Tag extends string, Body = {}> = Effect.Effect<never> & Body & {
261
261
  readonly _op: Tag
262
262
  }
263
263
 
@@ -273,7 +273,7 @@ export interface Async extends
273
273
  export interface Blocked<out E = any, out A = any> extends
274
274
  Op<"Blocked", {
275
275
  readonly i0: BlockedRequests.RequestBlock
276
- readonly i1: Effect.Effect<never, E, A>
276
+ readonly i1: Effect.Effect<A, E>
277
277
  }>
278
278
  {}
279
279
 
@@ -374,9 +374,9 @@ export interface Yield extends Op<OpCodes.OP_YIELD> {}
374
374
  export const isEffect = (u: unknown): u is Effect.Effect<unknown, unknown, unknown> => hasProperty(u, EffectTypeId)
375
375
 
376
376
  /* @internal */
377
- export const withFiberRuntime = <R, E, A>(
378
- withRuntime: (fiber: FiberRuntime.FiberRuntime<E, A>, status: FiberStatus.Running) => Effect.Effect<R, E, A>
379
- ): Effect.Effect<R, E, A> => {
377
+ export const withFiberRuntime = <A, E = never, R = never>(
378
+ withRuntime: (fiber: FiberRuntime.FiberRuntime<A, E>, status: FiberStatus.Running) => Effect.Effect<A, E, R>
379
+ ): Effect.Effect<A, E, R> => {
380
380
  internalize(withRuntime)
381
381
  const effect = new EffectPrimitive(OpCodes.OP_WITH_RUNTIME) as any
382
382
  effect.i0 = withRuntime
@@ -384,36 +384,34 @@ export const withFiberRuntime = <R, E, A>(
384
384
  }
385
385
 
386
386
  /* @internal */
387
- export const acquireUseRelease = dual<
388
- <A, R2, E2, A2, R3, X>(
389
- use: (a: A) => Effect.Effect<R2, E2, A2>,
390
- release: (a: A, exit: Exit.Exit<E2, A2>) => Effect.Effect<R3, never, X>
391
- ) => <R, E>(acquire: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | R3, E | E2, A2>,
392
- <R, E, A, R2, E2, A2, R3, X>(
393
- acquire: Effect.Effect<R, E, A>,
394
- use: (a: A) => Effect.Effect<R2, E2, A2>,
395
- release: (a: A, exit: Exit.Exit<E2, A2>) => Effect.Effect<R3, never, X>
396
- ) => Effect.Effect<R | R2 | R3, E | E2, A2>
397
- >(3, <R, E, A, R2, E2, A2, R3, X>(
398
- acquire: Effect.Effect<R, E, A>,
399
- use: (a: A) => Effect.Effect<R2, E2, A2>,
400
- release: (a: A, exit: Exit.Exit<E2, A2>) => Effect.Effect<R3, never, X>
401
- ): Effect.Effect<R | R2 | R3, E | E2, A2> =>
387
+ export const acquireUseRelease: {
388
+ <A2, E2, R2, A, X, R3>(
389
+ use: (a: A) => Effect.Effect<A2, E2, R2>,
390
+ release: (a: A, exit: Exit.Exit<A2, E2>) => Effect.Effect<X, never, R3>
391
+ ): <E, R>(acquire: Effect.Effect<A, E, R>) => Effect.Effect<A2, E2 | E, R2 | R3 | R>
392
+ <A, E, R, A2, E2, R2, X, R3>(
393
+ acquire: Effect.Effect<A, E, R>,
394
+ use: (a: A) => Effect.Effect<A2, E2, R2>,
395
+ release: (a: A, exit: Exit.Exit<A2, E2>) => Effect.Effect<X, never, R3>
396
+ ): Effect.Effect<A2, E | E2, R | R2 | R3>
397
+ } = dual(3, <A, E, R, A2, E2, R2, X, R3>(
398
+ acquire: Effect.Effect<A, E, R>,
399
+ use: (a: A) => Effect.Effect<A2, E2, R2>,
400
+ release: (a: A, exit: Exit.Exit<A2, E2>) => Effect.Effect<X, never, R3>
401
+ ): Effect.Effect<A2, E | E2, R | R2 | R3> =>
402
402
  uninterruptibleMask((restore) =>
403
403
  flatMap(
404
404
  acquire,
405
405
  (a) =>
406
- flatMap(exit(suspend(() => restore(use(a)))), (exit): Effect.Effect<R | R2 | R3, E | E2, A2> => {
406
+ flatMap(exit(suspend(() => restore(use(a)))), (exit): Effect.Effect<A2, E | E2, R | R2 | R3> => {
407
407
  return suspend(() => release(a, exit)).pipe(
408
408
  matchCauseEffect({
409
409
  onFailure: (cause) => {
410
410
  switch (exit._tag) {
411
- case OpCodes.OP_FAILURE: {
411
+ case OpCodes.OP_FAILURE:
412
412
  return failCause(internalCause.parallel(exit.i0, cause))
413
- }
414
- case OpCodes.OP_SUCCESS: {
413
+ case OpCodes.OP_SUCCESS:
415
414
  return failCause(cause)
416
- }
417
415
  }
418
416
  },
419
417
  onSuccess: () => exit
@@ -424,27 +422,30 @@ export const acquireUseRelease = dual<
424
422
  ))
425
423
 
426
424
  /* @internal */
427
- export const as = dual<
428
- <B>(value: B) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>,
429
- <R, E, A, B>(self: Effect.Effect<R, E, A>, value: B) => Effect.Effect<R, E, B>
430
- >(2, (self, value) => flatMap(self, () => succeed(value)))
425
+ export const as: {
426
+ <B>(value: B): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
427
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, value: B): Effect.Effect<B, E, R>
428
+ } = dual(
429
+ 2,
430
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, value: B): Effect.Effect<B, E, R> => flatMap(self, () => succeed(value))
431
+ )
431
432
 
432
433
  /* @internal */
433
- export const asUnit = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, void> => as(self, void 0)
434
+ export const asUnit = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<void, E, R> => as(self, void 0)
434
435
 
435
436
  /* @internal */
436
- export const async = <R, E, A>(
437
+ export const async = <A, E = never, R = never>(
437
438
  register: (
438
- callback: (_: Effect.Effect<R, E, A>) => void,
439
+ callback: (_: Effect.Effect<A, E, R>) => void,
439
440
  signal: AbortSignal
440
- ) => void | Effect.Effect<R, never, void>,
441
+ ) => void | Effect.Effect<void, never, R>,
441
442
  blockingOn: FiberId.FiberId = FiberId.none
442
- ): Effect.Effect<R, E, A> =>
443
+ ): Effect.Effect<A, E, R> =>
443
444
  suspend(() => {
444
445
  internalize(register)
445
- let backingResume: ((_: Effect.Effect<R, E, A>) => void) | undefined = undefined
446
- let pendingEffect: Effect.Effect<R, E, A> | undefined = undefined
447
- function proxyResume(effect: Effect.Effect<R, E, A>) {
446
+ let backingResume: ((_: Effect.Effect<A, E, R>) => void) | undefined = undefined
447
+ let pendingEffect: Effect.Effect<A, E, R> | undefined = undefined
448
+ function proxyResume(effect: Effect.Effect<A, E, R>) {
448
449
  if (backingResume) {
449
450
  backingResume(effect)
450
451
  } else if (pendingEffect === undefined) {
@@ -452,7 +453,7 @@ export const async = <R, E, A>(
452
453
  }
453
454
  }
454
455
  const effect = new EffectPrimitive(OpCodes.OP_ASYNC) as any
455
- effect.i0 = (resume: (_: Effect.Effect<R, E, A>) => void) => {
456
+ effect.i0 = (resume: (_: Effect.Effect<A, E, R>) => void) => {
456
457
  backingResume = resume
457
458
  if (pendingEffect) {
458
459
  resume(pendingEffect)
@@ -460,7 +461,7 @@ export const async = <R, E, A>(
460
461
  }
461
462
  effect.i1 = blockingOn
462
463
 
463
- let cancelerRef: Effect.Effect<R, never, void> | void = undefined
464
+ let cancelerRef: Effect.Effect<void, never, R> | void = undefined
464
465
  let controllerRef: AbortController | void = undefined
465
466
  if (register.length !== 1) {
466
467
  controllerRef = new AbortController()
@@ -480,13 +481,13 @@ export const async = <R, E, A>(
480
481
  })
481
482
 
482
483
  /* @internal */
483
- export const asyncEither = <R, E, A>(
484
+ export const asyncEither = <A, E = never, R = never>(
484
485
  register: (
485
- callback: (effect: Effect.Effect<R, E, A>) => void
486
- ) => Either.Either<Effect.Effect<R, never, void>, Effect.Effect<R, E, A>>,
486
+ resume: (effect: Effect.Effect<A, E, R>) => void
487
+ ) => Either.Either<Effect.Effect<void, never, R>, Effect.Effect<A, E, R>>,
487
488
  blockingOn: FiberId.FiberId = FiberId.none
488
- ): Effect.Effect<R, E, A> =>
489
- async<R, E, A>((resume) => {
489
+ ): Effect.Effect<A, E, R> =>
490
+ async<A, E, R>((resume) => {
490
491
  const result = register(resume)
491
492
  if (Either.isRight(result)) {
492
493
  resume(result.right)
@@ -497,13 +498,13 @@ export const asyncEither = <R, E, A>(
497
498
 
498
499
  /* @internal */
499
500
  export const catchAllCause = dual<
500
- <E, R2, E2, A2>(
501
- f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
502
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2, A2 | A>,
503
- <R, A, E, R2, E2, A2>(
504
- self: Effect.Effect<R, E, A>,
505
- f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
506
- ) => Effect.Effect<R2 | R, E2, A2 | A>
501
+ <E, A2, E2, R2>(
502
+ f: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
503
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2, R2 | R>,
504
+ <A, E, R, A2, E2, R2>(
505
+ self: Effect.Effect<A, E, R>,
506
+ f: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
507
+ ) => Effect.Effect<A2 | A, E2, R2 | R>
507
508
  >(2, (self, f) => {
508
509
  const effect = new EffectPrimitive(OpCodes.OP_ON_FAILURE) as any
509
510
  effect.i0 = self
@@ -513,15 +514,21 @@ export const catchAllCause = dual<
513
514
  })
514
515
 
515
516
  /* @internal */
516
- export const catchAll = dual<
517
- <E, R2, E2, A2>(
518
- f: (e: E) => Effect.Effect<R2, E2, A2>
519
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2, A2 | A>,
520
- <R, A, E, R2, E2, A2>(
521
- self: Effect.Effect<R, E, A>,
522
- f: (e: E) => Effect.Effect<R2, E2, A2>
523
- ) => Effect.Effect<R2 | R, E2, A2 | A>
524
- >(2, (self, f) => matchEffect(self, { onFailure: f, onSuccess: succeed }))
517
+ export const catchAll: {
518
+ <E, A2, E2, R2>(
519
+ f: (e: E) => Effect.Effect<A2, E2, R2>
520
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2, R2 | R>
521
+ <A, E, R, A2, E2, R2>(
522
+ self: Effect.Effect<A, E, R>,
523
+ f: (e: E) => Effect.Effect<A2, E2, R2>
524
+ ): Effect.Effect<A2 | A, E2, R2 | R>
525
+ } = dual(
526
+ 2,
527
+ <A, E, R, A2, E2, R2>(
528
+ self: Effect.Effect<A, E, R>,
529
+ f: (e: E) => Effect.Effect<A2, E2, R2>
530
+ ): Effect.Effect<A2 | A, E2, R2 | R> => matchEffect(self, { onFailure: f, onSuccess: succeed })
531
+ )
525
532
 
526
533
  /**
527
534
  * @macro identity
@@ -534,71 +541,66 @@ export const unified = <Args extends ReadonlyArray<any>, Ret extends Effect.Effe
534
541
 
535
542
  /* @internal */
536
543
  export const catchIf: {
537
- <E, EB extends E, R2, E2, A2>(
544
+ <E, EB extends E, A2, E2, R2>(
538
545
  refinement: Refinement<NoInfer<E>, EB>,
539
- f: (e: EB) => Effect.Effect<R2, E2, A2>
540
- ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2 | Exclude<E, EB>, A2 | A>
541
- <E, R2, E2, A2>(
546
+ f: (e: EB) => Effect.Effect<A2, E2, R2>
547
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2 | Exclude<E, EB>, R2 | R>
548
+ <E, A2, E2, R2>(
542
549
  predicate: Predicate<NoInfer<E>>,
543
- f: (e: NoInfer<E>) => Effect.Effect<R2, E2, A2>
544
- ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E | E2, A2 | A>
545
- <R, E, A, EA extends E, EB extends EA, R2, E2, A2>(
546
- self: Effect.Effect<R, E, A>,
547
- refinement: Refinement<EA, EB>,
548
- f: (e: EB) => Effect.Effect<R2, E2, A2>
549
- ): Effect.Effect<R | R2, E2 | Exclude<E, EB>, A | A2>
550
- <R, E, A, R2, E2, A2>(
551
- self: Effect.Effect<R, E, A>,
550
+ f: (e: NoInfer<E>) => Effect.Effect<A2, E2, R2>
551
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E | E2, R2 | R>
552
+ <A, E, R, EB extends E, A2, E2, R2>(
553
+ self: Effect.Effect<A, E, R>,
554
+ refinement: Refinement<E, EB>,
555
+ f: (e: EB) => Effect.Effect<A2, E2, R2>
556
+ ): Effect.Effect<A2 | A, E2 | Exclude<E, EB>, R2 | R>
557
+ <A, E, R, A2, E2, R2>(
558
+ self: Effect.Effect<A, E, R>,
552
559
  predicate: Predicate<E>,
553
- f: (e: E) => Effect.Effect<R2, E2, A2>
554
- ): Effect.Effect<R | R2, E | E2, A | A2>
555
- } = dual(3, <R, E, A, R2, E2, A2>(
556
- self: Effect.Effect<R, E, A>,
560
+ f: (e: E) => Effect.Effect<A2, E2, R2>
561
+ ): Effect.Effect<A | A2, E | E2, R | R2>
562
+ } = dual(3, <A, E, R, A2, E2, R2>(
563
+ self: Effect.Effect<A, E, R>,
557
564
  predicate: Predicate<E>,
558
- f: (e: E) => Effect.Effect<R2, E2, A2>
559
- ): Effect.Effect<R | R2, E | E2, A | A2> =>
560
- catchAllCause(self, (cause): Effect.Effect<R2 | R, E | E2, A2 | A> => {
565
+ f: (e: E) => Effect.Effect<A2, E2, R2>
566
+ ): Effect.Effect<A | A2, E | E2, R | R2> =>
567
+ catchAllCause(self, (cause): Effect.Effect<A | A2, E | E2, R | R2> => {
561
568
  const either = internalCause.failureOrCause(cause)
562
569
  switch (either._tag) {
563
- case "Left": {
570
+ case "Left":
564
571
  return predicate(either.left) ? f(either.left) : failCause(cause)
565
- }
566
- case "Right": {
572
+ case "Right":
567
573
  return failCause(either.right)
568
- }
569
574
  }
570
575
  }))
571
576
 
572
577
  /* @internal */
573
578
  export const catchSome = dual<
574
- <E, R2, E2, A2>(
575
- pf: (e: E) => Option.Option<Effect.Effect<R2, E2, A2>>
576
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E | E2, A2 | A>,
577
- <R, A, E, R2, E2, A2>(
578
- self: Effect.Effect<R, E, A>,
579
- pf: (e: E) => Option.Option<Effect.Effect<R2, E2, A2>>
580
- ) => Effect.Effect<R2 | R, E | E2, A2 | A>
581
- >(2, <R, A, E, R2, E2, A2>(
582
- self: Effect.Effect<R, E, A>,
583
- pf: (e: E) => Option.Option<Effect.Effect<R2, E2, A2>>
579
+ <E, A2, E2, R2>(
580
+ pf: (e: NoInfer<E>) => Option.Option<Effect.Effect<A2, E2, R2>>
581
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E | E2, R2 | R>,
582
+ <A, E, R, A2, E2, R2>(
583
+ self: Effect.Effect<A, E, R>,
584
+ pf: (e: NoInfer<E>) => Option.Option<Effect.Effect<A2, E2, R2>>
585
+ ) => Effect.Effect<A2 | A, E | E2, R2 | R>
586
+ >(2, <A, E, R, A2, E2, R2>(
587
+ self: Effect.Effect<A, E, R>,
588
+ pf: (e: NoInfer<E>) => Option.Option<Effect.Effect<A2, E2, R2>>
584
589
  ) =>
585
- catchAllCause(self, (cause): Effect.Effect<R2 | R, E | E2, A2 | A> => {
590
+ catchAllCause(self, (cause): Effect.Effect<A2 | A, E | E2, R2 | R> => {
586
591
  const either = internalCause.failureOrCause(cause)
587
592
  switch (either._tag) {
588
- case "Left": {
593
+ case "Left":
589
594
  return pipe(pf(either.left), Option.getOrElse(() => failCause(cause)))
590
- }
591
- case "Right": {
595
+ case "Right":
592
596
  return failCause(either.right)
593
- }
594
597
  }
595
598
  }))
596
599
 
597
600
  /* @internal */
598
- export const checkInterruptible = <R, E, A>(
599
- f: (isInterruptible: boolean) => Effect.Effect<R, E, A>
600
- ): Effect.Effect<R, E, A> =>
601
- withFiberRuntime<R, E, A>((_, status) => f(_runtimeFlags.interruption(status.runtimeFlags)))
601
+ export const checkInterruptible = <A, E, R>(
602
+ f: (isInterruptible: boolean) => Effect.Effect<A, E, R>
603
+ ): Effect.Effect<A, E, R> => withFiberRuntime((_, status) => f(_runtimeFlags.interruption(status.runtimeFlags)))
602
604
 
603
605
  const spanSymbol = Symbol.for("effect/SpanAnnotation")
604
606
  const originalSymbol = Symbol.for("effect/OriginalAnnotation")
@@ -635,43 +637,43 @@ const capture = <E>(obj: E & object, span: Option.Option<Tracer.Span>): E => {
635
637
  }
636
638
 
637
639
  /* @internal */
638
- export const die = (defect: unknown): Effect.Effect<never, never, never> =>
640
+ export const die = (defect: unknown): Effect.Effect<never> =>
639
641
  isObject(defect) && !(spanSymbol in defect) ?
640
642
  withFiberRuntime((fiber) => failCause(internalCause.die(capture(defect, currentSpanFromFiber(fiber)))))
641
643
  : failCause(internalCause.die(defect))
642
644
 
643
645
  /* @internal */
644
- export const dieMessage = (message: string): Effect.Effect<never, never, never> =>
646
+ export const dieMessage = (message: string): Effect.Effect<never> =>
645
647
  failCauseSync(() => internalCause.die(new RuntimeException(message)))
646
648
 
647
649
  /* @internal */
648
- export const dieSync = (evaluate: LazyArg<unknown>): Effect.Effect<never, never, never> => flatMap(sync(evaluate), die)
650
+ export const dieSync = (evaluate: LazyArg<unknown>): Effect.Effect<never> => flatMap(sync(evaluate), die)
649
651
 
650
652
  /* @internal */
651
- export const either = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Either.Either<E, A>> =>
653
+ export const either = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Either.Either<E, A>, never, R> =>
652
654
  matchEffect(self, {
653
655
  onFailure: (e) => succeed(Either.left(e)),
654
656
  onSuccess: (a) => succeed(Either.right(a))
655
657
  })
656
658
 
657
659
  /* @internal */
658
- export const exit = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Exit.Exit<E, A>> =>
660
+ export const exit = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Exit.Exit<A, E>, never, R> =>
659
661
  matchCause(self, {
660
662
  onFailure: exitFailCause,
661
663
  onSuccess: exitSucceed
662
664
  })
663
665
 
664
666
  /* @internal */
665
- export const fail = <E>(error: E): Effect.Effect<never, E, never> =>
667
+ export const fail = <E>(error: E): Effect.Effect<never, E> =>
666
668
  isObject(error) && !(spanSymbol in error) ?
667
669
  withFiberRuntime((fiber) => failCause(internalCause.fail(capture(error, currentSpanFromFiber(fiber)))))
668
670
  : failCause(internalCause.fail(error))
669
671
 
670
672
  /* @internal */
671
- export const failSync = <E>(evaluate: LazyArg<E>): Effect.Effect<never, E, never> => flatMap(sync(evaluate), fail)
673
+ export const failSync = <E>(evaluate: LazyArg<E>): Effect.Effect<never, E> => flatMap(sync(evaluate), fail)
672
674
 
673
675
  /* @internal */
674
- export const failCause = <E>(cause: Cause.Cause<E>): Effect.Effect<never, E, never> => {
676
+ export const failCause = <E>(cause: Cause.Cause<E>): Effect.Effect<never, E> => {
675
677
  const effect = new EffectPrimitiveFailure(OpCodes.OP_FAILURE) as any
676
678
  effect.i0 = cause
677
679
  return effect
@@ -680,74 +682,71 @@ export const failCause = <E>(cause: Cause.Cause<E>): Effect.Effect<never, E, nev
680
682
  /* @internal */
681
683
  export const failCauseSync = <E>(
682
684
  evaluate: LazyArg<Cause.Cause<E>>
683
- ): Effect.Effect<never, E, never> => flatMap(sync(evaluate), failCause)
685
+ ): Effect.Effect<never, E> => flatMap(sync(evaluate), failCause)
684
686
 
685
687
  /* @internal */
686
- export const fiberId: Effect.Effect<never, never, FiberId.FiberId> = withFiberRuntime<never, never, FiberId.FiberId>((
687
- state
688
- ) => succeed(state.id()))
688
+ export const fiberId: Effect.Effect<FiberId.FiberId> = withFiberRuntime((state) => succeed(state.id()))
689
689
 
690
690
  /* @internal */
691
- export const fiberIdWith = <R, E, A>(
692
- f: (descriptor: FiberId.Runtime) => Effect.Effect<R, E, A>
693
- ): Effect.Effect<R, E, A> => withFiberRuntime<R, E, A>((state) => f(state.id()))
691
+ export const fiberIdWith = <A, E, R>(
692
+ f: (descriptor: FiberId.Runtime) => Effect.Effect<A, E, R>
693
+ ): Effect.Effect<A, E, R> => withFiberRuntime((state) => f(state.id()))
694
694
 
695
695
  /* @internal */
696
696
  export const flatMap = dual<
697
- <A, R1, E1, B>(
698
- f: (a: A) => Effect.Effect<R1, E1, B>
699
- ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R1 | R, E1 | E, B>,
700
- <R, E, A, R1, E1, B>(
701
- self: Effect.Effect<R, E, A>,
702
- f: (a: A) => Effect.Effect<R1, E1, B>
703
- ) => Effect.Effect<R1 | R, E1 | E, B>
704
- >(2, (self, f) => {
705
- internalize(f)
706
- const effect = new EffectPrimitive(OpCodes.OP_ON_SUCCESS) as any
707
- effect.i0 = self
708
- effect.i1 = f
709
- return effect
710
- })
697
+ <A, B, E1, R1>(
698
+ f: (a: A) => Effect.Effect<B, E1, R1>
699
+ ) => <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E1 | E, R1 | R>,
700
+ <A, E, R, B, E1, R1>(
701
+ self: Effect.Effect<A, E, R>,
702
+ f: (a: A) => Effect.Effect<B, E1, R1>
703
+ ) => Effect.Effect<B, E | E1, R | R1>
704
+ >(
705
+ 2,
706
+ (self, f) => {
707
+ internalize(f)
708
+ const effect = new EffectPrimitive(OpCodes.OP_ON_SUCCESS) as any
709
+ effect.i0 = self
710
+ effect.i1 = f
711
+ return effect
712
+ }
713
+ )
711
714
 
712
715
  /* @internal */
713
- export const andThen = dual<
714
- {
715
- <A, X>(
716
- f: (a: NoInfer<A>) => X
717
- ): <R, E>(
718
- self: Effect.Effect<R, E, A>
719
- ) => [X] extends [Effect.Effect<infer R1, infer E1, infer A1>] ? Effect.Effect<R | R1, E | E1, A1>
720
- : [X] extends [Promise<infer A1>] ? Effect.Effect<R, E | Cause.UnknownException, A1>
721
- : Effect.Effect<R, E, X>
722
- <X>(
723
- f: X
724
- ): <R, E, A>(
725
- self: Effect.Effect<R, E, A>
726
- ) => [X] extends [Effect.Effect<infer R1, infer E1, infer A1>] ? Effect.Effect<R | R1, E | E1, A1>
727
- : [X] extends [Promise<infer A1>] ? Effect.Effect<R, E | Cause.UnknownException, A1>
728
- : Effect.Effect<R, E, X>
729
- },
730
- {
731
- <A, R, E, X>(
732
- self: Effect.Effect<R, E, A>,
733
- f: (a: NoInfer<A>) => X
734
- ): [X] extends [Effect.Effect<infer R1, infer E1, infer A1>] ? Effect.Effect<R | R1, E | E1, A1>
735
- : [X] extends [Promise<infer A1>] ? Effect.Effect<R, E | Cause.UnknownException, A1>
736
- : Effect.Effect<R, E, X>
737
- <A, R, E, X>(
738
- self: Effect.Effect<R, E, A>,
739
- f: X
740
- ): [X] extends [Effect.Effect<infer R1, infer E1, infer A1>] ? Effect.Effect<R | R1, E | E1, A1>
741
- : [X] extends [Promise<infer A1>] ? Effect.Effect<R, E | Cause.UnknownException, A1>
742
- : Effect.Effect<R, E, X>
743
- }
744
- >(2, (self, f) =>
716
+ export const andThen: {
717
+ <A, X>(
718
+ f: (a: NoInfer<A>) => X
719
+ ): <E, R>(
720
+ self: Effect.Effect<A, E, R>
721
+ ) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
722
+ : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
723
+ : Effect.Effect<X, E, R>
724
+ <X>(
725
+ f: X
726
+ ): <A, E, R>(
727
+ self: Effect.Effect<A, E, R>
728
+ ) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
729
+ : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
730
+ : Effect.Effect<X, E, R>
731
+ <A, R, E, X>(
732
+ self: Effect.Effect<A, E, R>,
733
+ f: (a: NoInfer<A>) => X
734
+ ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
735
+ : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
736
+ : Effect.Effect<X, E, R>
737
+ <A, R, E, X>(
738
+ self: Effect.Effect<A, E, R>,
739
+ f: X
740
+ ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
741
+ : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
742
+ : Effect.Effect<X, E, R>
743
+ } = dual(2, (self, f) =>
745
744
  flatMap(self, (a) => {
746
745
  const b = typeof f === "function" ? (f as any)(a) : f
747
746
  if (isEffect(b)) {
748
747
  return b
749
748
  } else if (isPromise(b)) {
750
- return async<never, Cause.UnknownException, any>((resume) => {
749
+ return async<any, Cause.UnknownException>((resume) => {
751
750
  b.then((a) => resume(succeed(a))).catch((e) => resume(fail(new UnknownException(e))))
752
751
  })
753
752
  }
@@ -755,161 +754,187 @@ export const andThen = dual<
755
754
  }))
756
755
 
757
756
  /* @internal */
758
- export const step = <R, E, A>(
759
- self: Effect.Effect<R, E, A>
760
- ): Effect.Effect<R, never, Exit.Exit<E, A> | Effect.Blocked<E, A>> => {
757
+ export const step = <A, E, R>(
758
+ self: Effect.Effect<A, E, R>
759
+ ): Effect.Effect<Exit.Exit<A, E> | Effect.Blocked<A, E>, never, R> => {
761
760
  const effect = new EffectPrimitive("OnStep") as any
762
761
  effect.i0 = self
763
762
  return effect
764
763
  }
765
764
 
766
765
  /* @internal */
767
- export const flatten = <R, E, R1, E1, A>(self: Effect.Effect<R, E, Effect.Effect<R1, E1, A>>) => flatMap(self, identity)
766
+ export const flatten = <A, E1, R1, E, R>(
767
+ self: Effect.Effect<Effect.Effect<A, E1, R1>, E, R>
768
+ ): Effect.Effect<A, E | E1, R | R1> => flatMap(self, identity)
768
769
 
769
770
  /* @internal */
770
- export const flip = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, A, E> =>
771
+ export const flip = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<E, A, R> =>
771
772
  matchEffect(self, { onFailure: succeed, onSuccess: fail })
772
773
 
773
774
  /* @internal */
774
- export const matchCause = dual<
775
+ export const matchCause: {
775
776
  <E, A2, A, A3>(
776
777
  options: {
777
778
  readonly onFailure: (cause: Cause.Cause<E>) => A2
778
779
  readonly onSuccess: (a: A) => A3
779
780
  }
780
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A2 | A3>,
781
- <R, E, A2, A, A3>(
782
- self: Effect.Effect<R, E, A>,
781
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, never, R>
782
+ <A, E, R, A2, A3>(
783
+ self: Effect.Effect<A, E, R>,
783
784
  options: {
784
785
  readonly onFailure: (cause: Cause.Cause<E>) => A2
785
786
  readonly onSuccess: (a: A) => A3
786
787
  }
787
- ) => Effect.Effect<R, never, A2 | A3>
788
- >(2, (self, { onFailure, onSuccess }) =>
788
+ ): Effect.Effect<A2 | A3, never, R>
789
+ } = dual(2, <A, E, R, A2, A3>(
790
+ self: Effect.Effect<A, E, R>,
791
+ options: {
792
+ readonly onFailure: (cause: Cause.Cause<E>) => A2
793
+ readonly onSuccess: (a: A) => A3
794
+ }
795
+ ): Effect.Effect<A2 | A3, never, R> =>
789
796
  matchCauseEffect(self, {
790
- onFailure: (cause) => succeed(onFailure(cause)),
791
- onSuccess: (a) => succeed(onSuccess(a))
797
+ onFailure: (cause) => succeed(options.onFailure(cause)),
798
+ onSuccess: (a) => succeed(options.onSuccess(a))
792
799
  }))
793
800
 
794
801
  /* @internal */
795
- export const matchCauseEffect = dual<
796
- <E, A, R2, E2, A2, R3, E3, A3>(
802
+ export const matchCauseEffect: {
803
+ <E, A2, E2, R2, A, A3, E3, R3>(
797
804
  options: {
798
- readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
799
- readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
805
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
806
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
800
807
  }
801
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>,
802
- <R, E, A, R2, E2, A2, R3, E3, A3>(
803
- self: Effect.Effect<R, E, A>,
808
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
809
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
810
+ self: Effect.Effect<A, E, R>,
804
811
  options: {
805
- readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
806
- readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
812
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
813
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
807
814
  }
808
- ) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>
809
- >(2, (self, { onFailure, onSuccess }) => {
815
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
816
+ } = dual(2, <A, E, R, A2, E2, R2, A3, E3, R3>(
817
+ self: Effect.Effect<A, E, R>,
818
+ options: {
819
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
820
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
821
+ }
822
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R> => {
810
823
  const effect = new EffectPrimitive(OpCodes.OP_ON_SUCCESS_AND_FAILURE) as any
811
824
  effect.i0 = self
812
- effect.i1 = onFailure
813
- effect.i2 = onSuccess
814
- internalize(onFailure)
815
- internalize(onSuccess)
825
+ effect.i1 = options.onFailure
826
+ effect.i2 = options.onSuccess
827
+ internalize(options.onFailure)
828
+ internalize(options.onSuccess)
816
829
  return effect
817
830
  })
818
831
 
819
832
  /* @internal */
820
- export const matchEffect = dual<
821
- <E, A, R2, E2, A2, R3, E3, A3>(
833
+ export const matchEffect: {
834
+ <E, A2, E2, R2, A, A3, E3, R3>(
822
835
  options: {
823
- readonly onFailure: (e: E) => Effect.Effect<R2, E2, A2>
824
- readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
836
+ readonly onFailure: (e: E) => Effect.Effect<A2, E2, R2>
837
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
825
838
  }
826
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>,
827
- <R, E, A, R2, E2, A2, R3, E3, A3>(
828
- self: Effect.Effect<R, E, A>,
839
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
840
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
841
+ self: Effect.Effect<A, E, R>,
829
842
  options: {
830
- readonly onFailure: (e: E) => Effect.Effect<R2, E2, A2>
831
- readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
843
+ readonly onFailure: (e: E) => Effect.Effect<A2, E2, R2>
844
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
832
845
  }
833
- ) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>
834
- >(2, (self, { onFailure, onSuccess }) =>
846
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
847
+ } = dual(2, <A, E, R, A2, E2, R2, A3, E3, R3>(
848
+ self: Effect.Effect<A, E, R>,
849
+ options: {
850
+ readonly onFailure: (e: E) => Effect.Effect<A2, E2, R2>
851
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
852
+ }
853
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R> =>
835
854
  matchCauseEffect(self, {
836
855
  onFailure: (cause) => {
837
- const failures = internalCause.failures(cause)
838
856
  const defects = internalCause.defects(cause)
839
857
  if (defects.length > 0) {
840
858
  return failCause(internalCause.electFailures(cause))
841
859
  }
860
+ const failures = internalCause.failures(cause)
842
861
  if (failures.length > 0) {
843
- return onFailure(Chunk.unsafeHead(failures))
862
+ return options.onFailure(Chunk.unsafeHead(failures))
844
863
  }
845
864
  return failCause(cause as Cause.Cause<never>)
846
865
  },
847
- onSuccess
866
+ onSuccess: options.onSuccess
848
867
  }))
849
868
 
850
869
  /* @internal */
851
- export const forEachSequential = dual<
852
- <A, R, E, B>(f: (a: A, i: number) => Effect.Effect<R, E, B>) => (self: Iterable<A>) => Effect.Effect<R, E, Array<B>>,
853
- <A, R, E, B>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, B>) => Effect.Effect<R, E, Array<B>>
854
- >(2, (self, f) =>
855
- suspend(() => {
856
- const arr = ReadonlyArray.fromIterable(self)
857
- const ret = new Array(arr.length)
858
- let i = 0
859
- return as(
860
- whileLoop({
870
+ export const forEachSequential: {
871
+ <A, B, E, R>(f: (a: A, i: number) => Effect.Effect<B, E, R>): (self: Iterable<A>) => Effect.Effect<Array<B>, E, R>
872
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<Array<B>, E, R>
873
+ } = dual(
874
+ 2,
875
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<Array<B>, E, R> =>
876
+ suspend(() => {
877
+ const arr = ReadonlyArray.fromIterable(self)
878
+ const ret = new Array(arr.length)
879
+ let i = 0
880
+ return as(
881
+ whileLoop({
882
+ while: () => i < arr.length,
883
+ body: () => f(arr[i], i),
884
+ step: (b) => {
885
+ ret[i++] = b
886
+ }
887
+ }),
888
+ ret
889
+ )
890
+ })
891
+ )
892
+
893
+ /* @internal */
894
+ export const forEachSequentialDiscard: {
895
+ <A, B, E, R>(f: (a: A, i: number) => Effect.Effect<B, E, R>): (self: Iterable<A>) => Effect.Effect<void, E, R>
896
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<void, E, R>
897
+ } = dual(
898
+ 2,
899
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<void, E, R> =>
900
+ suspend(() => {
901
+ const arr = ReadonlyArray.fromIterable(self)
902
+ let i = 0
903
+ return whileLoop({
861
904
  while: () => i < arr.length,
862
905
  body: () => f(arr[i], i),
863
- step: (b) => {
864
- ret[i++] = b
906
+ step: () => {
907
+ i++
865
908
  }
866
- }),
867
- ret
868
- )
869
- }))
870
-
871
- /* @internal */
872
- export const forEachSequentialDiscard = dual<
873
- <A, R, E, B>(f: (a: A, i: number) => Effect.Effect<R, E, B>) => (self: Iterable<A>) => Effect.Effect<R, E, void>,
874
- <A, R, E, B>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, B>) => Effect.Effect<R, E, void>
875
- >(2, (self, f) =>
876
- suspend(() => {
877
- const arr = ReadonlyArray.fromIterable(self)
878
- let i = 0
879
- return whileLoop({
880
- while: () => i < arr.length,
881
- body: () => f(arr[i], i),
882
- step: () => {
883
- i++
884
- }
909
+ })
885
910
  })
886
- }))
911
+ )
887
912
 
888
913
  /* @internal */
889
914
  export const if_ = dual<
890
- <R1, R2, E1, E2, A, A1>(
915
+ <A1, E1, R1, A2, E2, R2>(
891
916
  options: {
892
- readonly onTrue: Effect.Effect<R1, E1, A>
893
- readonly onFalse: Effect.Effect<R2, E2, A1>
917
+ readonly onTrue: Effect.Effect<A1, E1, R1>
918
+ readonly onFalse: Effect.Effect<A2, E2, R2>
894
919
  }
895
- ) => <R = never, E = never>(
896
- self: Effect.Effect<R, E, boolean> | boolean
897
- ) => Effect.Effect<R | R1 | R2, E | E1 | E2, A | A1>,
920
+ ) => <E = never, R = never>(
921
+ self: Effect.Effect<boolean, E, R> | boolean
922
+ ) => Effect.Effect<A1 | A2, E | E1 | E2, R | R1 | R2>,
898
923
  {
899
- <R1, R2, E1, E2, A, A1>(
924
+ <A1, E1, R1, A2, E2, R2>(
900
925
  self: boolean,
901
926
  options: {
902
- readonly onTrue: Effect.Effect<R1, E1, A>
903
- readonly onFalse: Effect.Effect<R2, E2, A1>
927
+ readonly onTrue: Effect.Effect<A1, E1, R1>
928
+ readonly onFalse: Effect.Effect<A2, E2, R2>
904
929
  }
905
- ): Effect.Effect<R1 | R2, E1 | E2, A | A1>
906
- <R, E, R1, R2, E1, E2, A, A1>(
907
- self: Effect.Effect<R, E, boolean>,
930
+ ): Effect.Effect<A1 | A2, E1 | E2, R1 | R2>
931
+ <E, R, A1, E1, R1, A2, E2, R2>(
932
+ self: Effect.Effect<boolean, E, R>,
908
933
  options: {
909
- readonly onTrue: Effect.Effect<R1, E1, A>
910
- readonly onFalse: Effect.Effect<R2, E2, A1>
934
+ readonly onTrue: Effect.Effect<A1, E1, R1>
935
+ readonly onFalse: Effect.Effect<A2, E2, R2>
911
936
  }
912
- ): Effect.Effect<R1 | R2 | R, E1 | E2 | E, A | A1>
937
+ ): Effect.Effect<A1 | A2, E1 | E2 | E, R1 | R2 | R>
913
938
  }
914
939
  >(
915
940
  (args) => typeof args[0] === "boolean" || isEffect(args[0]),
@@ -920,14 +945,14 @@ export const if_ = dual<
920
945
  )
921
946
 
922
947
  /* @internal */
923
- export const interrupt: Effect.Effect<never, never, never> = flatMap(fiberId, (fiberId) => interruptWith(fiberId))
948
+ export const interrupt: Effect.Effect<never> = flatMap(fiberId, (fiberId) => interruptWith(fiberId))
924
949
 
925
950
  /* @internal */
926
- export const interruptWith = (fiberId: FiberId.FiberId): Effect.Effect<never, never, never> =>
951
+ export const interruptWith = (fiberId: FiberId.FiberId): Effect.Effect<never> =>
927
952
  failCause(internalCause.interrupt(fiberId))
928
953
 
929
954
  /* @internal */
930
- export const interruptible = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, A> => {
955
+ export const interruptible = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => {
931
956
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
932
957
  effect.i0 = RuntimeFlagsPatch.enable(_runtimeFlags.Interruption)
933
958
  effect.i1 = () => self
@@ -935,9 +960,9 @@ export const interruptible = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Eff
935
960
  }
936
961
 
937
962
  /* @internal */
938
- export const interruptibleMask = <R, E, A>(
939
- f: (restore: <RX, EX, AX>(effect: Effect.Effect<RX, EX, AX>) => Effect.Effect<RX, EX, AX>) => Effect.Effect<R, E, A>
940
- ): Effect.Effect<R, E, A> => {
963
+ export const interruptibleMask = <A, E, R>(
964
+ f: (restore: <AX, EX, RX>(effect: Effect.Effect<AX, EX, RX>) => Effect.Effect<AX, EX, RX>) => Effect.Effect<A, E, R>
965
+ ): Effect.Effect<A, E, R> => {
941
966
  internalize(f)
942
967
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
943
968
  effect.i0 = RuntimeFlagsPatch.enable(_runtimeFlags.Interruption)
@@ -949,79 +974,98 @@ export const interruptibleMask = <R, E, A>(
949
974
  }
950
975
 
951
976
  /* @internal */
952
- export const intoDeferred = dual<
953
- <E, A>(deferred: Deferred.Deferred<E, A>) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, boolean>,
954
- <R, E, A>(self: Effect.Effect<R, E, A>, deferred: Deferred.Deferred<E, A>) => Effect.Effect<R, never, boolean>
955
- >(2, (self, deferred) =>
956
- uninterruptibleMask((restore) =>
957
- flatMap(
958
- exit(restore(self)),
959
- (exit) => deferredDone(deferred, exit)
977
+ export const intoDeferred: {
978
+ <A, E>(deferred: Deferred.Deferred<A, E>): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<boolean, never, R>
979
+ <A, E, R>(self: Effect.Effect<A, E, R>, deferred: Deferred.Deferred<A, E>): Effect.Effect<boolean, never, R>
980
+ } = dual(
981
+ 2,
982
+ <A, E, R>(self: Effect.Effect<A, E, R>, deferred: Deferred.Deferred<A, E>): Effect.Effect<boolean, never, R> =>
983
+ uninterruptibleMask((restore) =>
984
+ flatMap(
985
+ exit(restore(self)),
986
+ (exit) => deferredDone(deferred, exit)
987
+ )
960
988
  )
961
- ))
989
+ )
962
990
 
963
991
  /* @internal */
964
- export const map = dual<
965
- <A, B>(f: (a: A) => B) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>,
966
- <R, E, A, B>(self: Effect.Effect<R, E, A>, f: (a: A) => B) => Effect.Effect<R, E, B>
967
- >(2, (self, f) => flatMap(self, (a) => sync(() => f(a))))
992
+ export const map: {
993
+ <A, B>(f: (a: A) => B): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
994
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, f: (a: A) => B): Effect.Effect<B, E, R>
995
+ } = dual(
996
+ 2,
997
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, f: (a: A) => B): Effect.Effect<B, E, R> =>
998
+ flatMap(self, (a) => sync(() => f(a)))
999
+ )
968
1000
 
969
1001
  /* @internal */
970
- export const mapBoth = dual<
971
- <E, A, E2, A2>(
1002
+ export const mapBoth: {
1003
+ <E, E2, A, A2>(
972
1004
  options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
973
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A2>,
974
- <R, E, A, E2, A2>(
975
- self: Effect.Effect<R, E, A>,
1005
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2, E2, R>
1006
+ <A, E, R, E2, A2>(
1007
+ self: Effect.Effect<A, E, R>,
976
1008
  options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
977
- ) => Effect.Effect<R, E2, A2>
978
- >(2, (self, { onFailure, onSuccess }) =>
1009
+ ): Effect.Effect<A2, E2, R>
1010
+ } = dual(2, <A, E, R, E2, A2>(
1011
+ self: Effect.Effect<A, E, R>,
1012
+ options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
1013
+ ): Effect.Effect<A2, E2, R> =>
979
1014
  matchEffect(self, {
980
- onFailure: (e) => failSync(() => onFailure(e)),
981
- onSuccess: (a) => sync(() => onSuccess(a))
1015
+ onFailure: (e) => failSync(() => options.onFailure(e)),
1016
+ onSuccess: (a) => sync(() => options.onSuccess(a))
982
1017
  }))
983
1018
 
984
1019
  /* @internal */
985
- export const mapError = dual<
986
- <E, E2>(f: (e: E) => E2) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A>,
987
- <R, A, E, E2>(self: Effect.Effect<R, E, A>, f: (e: E) => E2) => Effect.Effect<R, E2, A>
988
- >(2, (self, f) =>
989
- matchCauseEffect(self, {
990
- onFailure: (cause) => {
991
- const either = internalCause.failureOrCause(cause)
992
- switch (either._tag) {
993
- case "Left": {
994
- return failSync(() => f(either.left))
995
- }
996
- case "Right": {
997
- return failCause(either.right)
1020
+ export const mapError: {
1021
+ <E, E2>(f: (e: E) => E2): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2, R>
1022
+ <A, E, R, E2>(self: Effect.Effect<A, E, R>, f: (e: E) => E2): Effect.Effect<A, E2, R>
1023
+ } = dual(
1024
+ 2,
1025
+ <A, E, R, E2>(self: Effect.Effect<A, E, R>, f: (e: E) => E2): Effect.Effect<A, E2, R> =>
1026
+ matchCauseEffect(self, {
1027
+ onFailure: (cause) => {
1028
+ const either = internalCause.failureOrCause(cause)
1029
+ switch (either._tag) {
1030
+ case "Left": {
1031
+ return failSync(() => f(either.left))
1032
+ }
1033
+ case "Right": {
1034
+ return failCause(either.right)
1035
+ }
998
1036
  }
999
- }
1000
- },
1001
- onSuccess: succeed
1002
- }))
1037
+ },
1038
+ onSuccess: succeed
1039
+ })
1040
+ )
1003
1041
 
1004
1042
  /* @internal */
1005
- export const onError = dual<
1006
- <E, R2, X>(
1007
- cleanup: (cause: Cause.Cause<E>) => Effect.Effect<R2, never, X>
1008
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E, A>,
1009
- <R, A, E, R2, X>(
1010
- self: Effect.Effect<R, E, A>,
1011
- cleanup: (cause: Cause.Cause<E>) => Effect.Effect<R2, never, X>
1012
- ) => Effect.Effect<R2 | R, E, A>
1013
- >(2, (self, cleanup) => onExit(self, unified((exit) => exitIsSuccess(exit) ? unit : cleanup(exit.i0))))
1014
-
1015
- /* @internal */
1016
- export const onExit = dual<
1017
- <E, A, R2, X>(
1018
- cleanup: (exit: Exit.Exit<E, A>) => Effect.Effect<R2, never, X>
1019
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E, A>,
1020
- <R, E, A, R2, X>(
1021
- self: Effect.Effect<R, E, A>,
1022
- cleanup: (exit: Exit.Exit<E, A>) => Effect.Effect<R2, never, X>
1023
- ) => Effect.Effect<R2 | R, E, A>
1024
- >(2, (self, cleanup) =>
1043
+ export const onError: {
1044
+ <E, X, R2>(
1045
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1046
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2 | R>
1047
+ <A, E, R, X, R2>(
1048
+ self: Effect.Effect<A, E, R>,
1049
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1050
+ ): Effect.Effect<A, E, R2 | R>
1051
+ } = dual(2, <A, E, R, X, R2>(
1052
+ self: Effect.Effect<A, E, R>,
1053
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1054
+ ): Effect.Effect<A, E, R2 | R> => onExit(self, unified((exit) => exitIsSuccess(exit) ? unit : cleanup(exit.i0))))
1055
+
1056
+ /* @internal */
1057
+ export const onExit: {
1058
+ <A, E, X, R2>(
1059
+ cleanup: (exit: Exit.Exit<A, E>) => Effect.Effect<X, never, R2>
1060
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2 | R>
1061
+ <A, E, R, X, R2>(
1062
+ self: Effect.Effect<A, E, R>,
1063
+ cleanup: (exit: Exit.Exit<A, E>) => Effect.Effect<X, never, R2>
1064
+ ): Effect.Effect<A, E, R2 | R>
1065
+ } = dual(2, <A, E, R, X, R2>(
1066
+ self: Effect.Effect<A, E, R>,
1067
+ cleanup: (exit: Exit.Exit<A, E>) => Effect.Effect<X, never, R2>
1068
+ ): Effect.Effect<A, E, R2 | R> =>
1025
1069
  uninterruptibleMask((restore) =>
1026
1070
  matchCauseEffect(restore(self), {
1027
1071
  onFailure: (cause1) => {
@@ -1039,15 +1083,18 @@ export const onExit = dual<
1039
1083
  ))
1040
1084
 
1041
1085
  /* @internal */
1042
- export const onInterrupt = dual<
1043
- <R2, X>(
1044
- cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, X>
1045
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E, A>,
1046
- <R, E, A, R2, X>(
1047
- self: Effect.Effect<R, E, A>,
1048
- cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, X>
1049
- ) => Effect.Effect<R2 | R, E, A>
1050
- >(2, (self, cleanup) =>
1086
+ export const onInterrupt: {
1087
+ <X, R2>(
1088
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<X, never, R2>
1089
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2 | R>
1090
+ <A, E, R, X, R2>(
1091
+ self: Effect.Effect<A, E, R>,
1092
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<X, never, R2>
1093
+ ): Effect.Effect<A, E, R2 | R>
1094
+ } = dual(2, <A, E, R, X, R2>(
1095
+ self: Effect.Effect<A, E, R>,
1096
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<X, never, R2>
1097
+ ): Effect.Effect<A, E, R2 | R> =>
1051
1098
  onExit(
1052
1099
  self,
1053
1100
  exitMatch({
@@ -1060,28 +1107,37 @@ export const onInterrupt = dual<
1060
1107
  ))
1061
1108
 
1062
1109
  /* @internal */
1063
- export const orElse = dual<
1064
- <R2, E2, A2>(
1065
- that: LazyArg<Effect.Effect<R2, E2, A2>>
1066
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E2, A | A2>,
1067
- <R, E, A, R2, E2, A2>(
1068
- self: Effect.Effect<R, E, A>,
1069
- that: LazyArg<Effect.Effect<R2, E2, A2>>
1070
- ) => Effect.Effect<R | R2, E2, A | A2>
1071
- >(2, (self, that) => attemptOrElse(self, that, succeed))
1110
+ export const orElse: {
1111
+ <A2, E2, R2>(
1112
+ that: LazyArg<Effect.Effect<A2, E2, R2>>
1113
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2, R2 | R>
1114
+ <A, E, R, A2, E2, R2>(
1115
+ self: Effect.Effect<A, E, R>,
1116
+ that: LazyArg<Effect.Effect<A2, E2, R2>>
1117
+ ): Effect.Effect<A2 | A, E2, R2 | R>
1118
+ } = dual(
1119
+ 2,
1120
+ <A, E, R, A2, E2, R2>(
1121
+ self: Effect.Effect<A, E, R>,
1122
+ that: LazyArg<Effect.Effect<A2, E2, R2>>
1123
+ ): Effect.Effect<A2 | A, E2, R2 | R> => attemptOrElse(self, that, succeed)
1124
+ )
1072
1125
 
1073
1126
  /* @internal */
1074
- export const orDie = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, A> => orDieWith(self, identity)
1127
+ export const orDie = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, never, R> => orDieWith(self, identity)
1075
1128
 
1076
1129
  /* @internal */
1077
- export const orDieWith = dual<
1078
- <E>(f: (error: E) => unknown) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A>,
1079
- <R, E, A>(self: Effect.Effect<R, E, A>, f: (error: E) => unknown) => Effect.Effect<R, never, A>
1080
- >(2, (self, f) =>
1081
- matchEffect(self, {
1082
- onFailure: (e) => die(f(e)),
1083
- onSuccess: succeed
1084
- }))
1130
+ export const orDieWith: {
1131
+ <E>(f: (error: E) => unknown): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, never, R>
1132
+ <A, E, R>(self: Effect.Effect<A, E, R>, f: (error: E) => unknown): Effect.Effect<A, never, R>
1133
+ } = dual(
1134
+ 2,
1135
+ <A, E, R>(self: Effect.Effect<A, E, R>, f: (error: E) => unknown): Effect.Effect<A, never, R> =>
1136
+ matchEffect(self, {
1137
+ onFailure: (e) => die(f(e)),
1138
+ onSuccess: succeed
1139
+ })
1140
+ )
1085
1141
 
1086
1142
  /* @internal */
1087
1143
  export const partitionMap = <A, A1, A2>(
@@ -1104,25 +1160,23 @@ export const partitionMap = <A, A1, A2>(
1104
1160
  )
1105
1161
 
1106
1162
  /* @internal */
1107
- export const runtimeFlags: Effect.Effect<never, never, RuntimeFlags.RuntimeFlags> = withFiberRuntime<
1108
- never,
1109
- never,
1110
- RuntimeFlags.RuntimeFlags
1111
- >((_, status) => succeed(status.runtimeFlags))
1163
+ export const runtimeFlags: Effect.Effect<RuntimeFlags.RuntimeFlags> = withFiberRuntime((_, status) =>
1164
+ succeed(status.runtimeFlags)
1165
+ )
1112
1166
 
1113
1167
  /* @internal */
1114
- export const succeed = <A>(value: A): Effect.Effect<never, never, A> => {
1168
+ export const succeed = <A>(value: A): Effect.Effect<A> => {
1115
1169
  const effect = new EffectPrimitiveSuccess(OpCodes.OP_SUCCESS) as any
1116
1170
  effect.i0 = value
1117
1171
  return effect
1118
1172
  }
1119
1173
 
1120
1174
  /* @internal */
1121
- export const suspend = <R, E, A>(effect: LazyArg<Effect.Effect<R, E, A>>): Effect.Effect<R, E, A> =>
1175
+ export const suspend = <A, E, R>(effect: LazyArg<Effect.Effect<A, E, R>>): Effect.Effect<A, E, R> =>
1122
1176
  flatMap(sync(effect), identity)
1123
1177
 
1124
1178
  /* @internal */
1125
- export const sync = <A>(evaluate: LazyArg<A>): Effect.Effect<never, never, A> => {
1179
+ export const sync = <A>(evaluate: LazyArg<A>): Effect.Effect<A> => {
1126
1180
  internalize(evaluate)
1127
1181
  const effect = new EffectPrimitive(OpCodes.OP_SYNC) as any
1128
1182
  effect.i0 = evaluate
@@ -1134,32 +1188,32 @@ export const tap = dual<
1134
1188
  {
1135
1189
  <A, X>(
1136
1190
  f: (a: NoInfer<A>) => X
1137
- ): <R, E>(
1138
- self: Effect.Effect<R, E, A>
1139
- ) => [X] extends [Effect.Effect<infer R1, infer E1, infer _A1>] ? Effect.Effect<R | R1, E | E1, A>
1140
- : [X] extends [Promise<infer _A1>] ? Effect.Effect<R, E | Cause.UnknownException, A>
1141
- : Effect.Effect<R, E, A>
1191
+ ): <E, R>(
1192
+ self: Effect.Effect<A, E, R>
1193
+ ) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1194
+ : [X] extends [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1195
+ : Effect.Effect<A, E, R>
1142
1196
  <X>(
1143
1197
  f: X
1144
- ): <R, E, A>(
1145
- self: Effect.Effect<R, E, A>
1146
- ) => [X] extends [Effect.Effect<infer R1, infer E1, infer _A1>] ? Effect.Effect<R | R1, E | E1, A>
1147
- : [X] extends [Promise<infer _A1>] ? Effect.Effect<R, E | Cause.UnknownException, A>
1148
- : Effect.Effect<R, E, A>
1198
+ ): <A, E, R>(
1199
+ self: Effect.Effect<A, E, R>
1200
+ ) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1201
+ : [X] extends [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1202
+ : Effect.Effect<A, E, R>
1149
1203
  },
1150
1204
  {
1151
- <A, R, E, X>(
1152
- self: Effect.Effect<R, E, A>,
1205
+ <A, E, R, X>(
1206
+ self: Effect.Effect<A, E, R>,
1153
1207
  f: (a: NoInfer<A>) => X
1154
- ): [X] extends [Effect.Effect<infer R1, infer E1, infer _A1>] ? Effect.Effect<R | R1, E | E1, A>
1155
- : [X] extends [Promise<infer _A1>] ? Effect.Effect<R, E | Cause.UnknownException, A>
1156
- : Effect.Effect<R, E, A>
1157
- <A, R, E, X>(
1158
- self: Effect.Effect<R, E, A>,
1208
+ ): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1209
+ : [X] extends [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1210
+ : Effect.Effect<A, E, R>
1211
+ <A, E, R, X>(
1212
+ self: Effect.Effect<A, E, R>,
1159
1213
  f: X
1160
- ): [X] extends [Effect.Effect<infer R1, infer E1, infer _A1>] ? Effect.Effect<R | R1, E | E1, A>
1161
- : [X] extends [Promise<infer _A1>] ? Effect.Effect<R, E | Cause.UnknownException, A>
1162
- : Effect.Effect<R, E, A>
1214
+ ): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1215
+ : [X] extends [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1216
+ : Effect.Effect<A, E, R>
1163
1217
  }
1164
1218
  >(2, (self, f) =>
1165
1219
  flatMap(self, (a) => {
@@ -1167,7 +1221,7 @@ export const tap = dual<
1167
1221
  if (isEffect(b)) {
1168
1222
  return as(b, a)
1169
1223
  } else if (isPromise(b)) {
1170
- return async<never, Cause.UnknownException, any>((resume) => {
1224
+ return async<any, Cause.UnknownException>((resume) => {
1171
1225
  b.then((_) => resume(succeed(a))).catch((e) => resume(fail(new UnknownException(e))))
1172
1226
  })
1173
1227
  }
@@ -1175,27 +1229,31 @@ export const tap = dual<
1175
1229
  }))
1176
1230
 
1177
1231
  /* @internal */
1178
- export const transplant = <R, E, A>(
1179
- f: (grafter: <R2, E2, A2>(effect: Effect.Effect<R2, E2, A2>) => Effect.Effect<R2, E2, A2>) => Effect.Effect<R, E, A>
1180
- ): Effect.Effect<R, E, A> =>
1181
- withFiberRuntime<R, E, A>((state) => {
1232
+ export const transplant = <A, E, R>(
1233
+ f: (grafter: <A2, E2, R2>(effect: Effect.Effect<A2, E2, R2>) => Effect.Effect<A2, E2, R2>) => Effect.Effect<A, E, R>
1234
+ ): Effect.Effect<A, E, R> =>
1235
+ withFiberRuntime<A, E, R>((state) => {
1182
1236
  const scopeOverride = state.getFiberRef(currentForkScopeOverride)
1183
1237
  const scope = pipe(scopeOverride, Option.getOrElse(() => state.scope()))
1184
1238
  return f(fiberRefLocally(currentForkScopeOverride, Option.some(scope)))
1185
1239
  })
1186
1240
 
1187
1241
  /* @internal */
1188
- export const attemptOrElse = dual<
1189
- <R2, E2, A2, A, R3, E3, A3>(
1190
- that: LazyArg<Effect.Effect<R2, E2, A2>>,
1191
- onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
1192
- ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | R3, E2 | E3, A2 | A3>,
1193
- <R, E, A, R2, E2, A2, R3, E3, A3>(
1194
- self: Effect.Effect<R, E, A>,
1195
- that: LazyArg<Effect.Effect<R2, E2, A2>>,
1196
- onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
1197
- ) => Effect.Effect<R | R2 | R3, E2 | E3, A2 | A3>
1198
- >(3, (self, that, onSuccess) =>
1242
+ export const attemptOrElse: {
1243
+ <A2, E2, R2, A, A3, E3, R3>(
1244
+ that: LazyArg<Effect.Effect<A2, E2, R2>>,
1245
+ onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
1246
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R | R2 | R3>
1247
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
1248
+ self: Effect.Effect<A, E, R>,
1249
+ that: LazyArg<Effect.Effect<A2, E2, R2>>,
1250
+ onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
1251
+ ): Effect.Effect<A2 | A3, E2 | E3, R | R2 | R3>
1252
+ } = dual(3, <A, E, R, A2, E2, R2, A3, E3, R3>(
1253
+ self: Effect.Effect<A, E, R>,
1254
+ that: LazyArg<Effect.Effect<A2, E2, R2>>,
1255
+ onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
1256
+ ): Effect.Effect<A2 | A3, E2 | E3, R | R2 | R3> =>
1199
1257
  matchCauseEffect(self, {
1200
1258
  onFailure: (cause) => {
1201
1259
  const defects = internalCause.defects(cause)
@@ -1208,9 +1266,9 @@ export const attemptOrElse = dual<
1208
1266
  }))
1209
1267
 
1210
1268
  /* @internal */
1211
- export const uninterruptible: <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A> = <R, E, A>(
1212
- self: Effect.Effect<R, E, A>
1213
- ): Effect.Effect<R, E, A> => {
1269
+ export const uninterruptible: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R> = <A, E, R>(
1270
+ self: Effect.Effect<A, E, R>
1271
+ ): Effect.Effect<A, E, R> => {
1214
1272
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1215
1273
  effect.i0 = RuntimeFlagsPatch.disable(_runtimeFlags.Interruption)
1216
1274
  effect.i1 = () => self
@@ -1218,9 +1276,9 @@ export const uninterruptible: <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.
1218
1276
  }
1219
1277
 
1220
1278
  /* @internal */
1221
- export const uninterruptibleMask = <R, E, A>(
1222
- f: (restore: <RX, EX, AX>(effect: Effect.Effect<RX, EX, AX>) => Effect.Effect<RX, EX, AX>) => Effect.Effect<R, E, A>
1223
- ): Effect.Effect<R, E, A> => {
1279
+ export const uninterruptibleMask = <A, E, R>(
1280
+ f: (restore: <AX, EX, RX>(effect: Effect.Effect<AX, EX, RX>) => Effect.Effect<AX, EX, RX>) => Effect.Effect<A, E, R>
1281
+ ): Effect.Effect<A, E, R> => {
1224
1282
  internalize(f)
1225
1283
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1226
1284
  effect.i0 = RuntimeFlagsPatch.disable(_runtimeFlags.Interruption)
@@ -1232,10 +1290,10 @@ export const uninterruptibleMask = <R, E, A>(
1232
1290
  }
1233
1291
 
1234
1292
  /* @internal */
1235
- export const unit: Effect.Effect<never, never, void> = succeed(void 0)
1293
+ export const unit: Effect.Effect<void> = succeed(void 0)
1236
1294
 
1237
1295
  /* @internal */
1238
- export const updateRuntimeFlags = (patch: RuntimeFlagsPatch.RuntimeFlagsPatch): Effect.Effect<never, never, void> => {
1296
+ export const updateRuntimeFlags = (patch: RuntimeFlagsPatch.RuntimeFlagsPatch): Effect.Effect<void> => {
1239
1297
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1240
1298
  effect.i0 = patch
1241
1299
  effect.i1 = void 0
@@ -1243,17 +1301,20 @@ export const updateRuntimeFlags = (patch: RuntimeFlagsPatch.RuntimeFlagsPatch):
1243
1301
  }
1244
1302
 
1245
1303
  /* @internal */
1246
- export const whenEffect = dual<
1247
- <R, E>(
1248
- condition: Effect.Effect<R, E, boolean>
1249
- ) => <R2, E2, A>(
1250
- effect: Effect.Effect<R2, E2, A>
1251
- ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>,
1252
- <R, E, A, R2, E2>(
1253
- self: Effect.Effect<R2, E2, A>,
1254
- condition: Effect.Effect<R, E, boolean>
1255
- ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>
1256
- >(2, (self, condition) =>
1304
+ export const whenEffect: {
1305
+ <E, R>(
1306
+ condition: Effect.Effect<boolean, E, R>
1307
+ ): <A, E2, R2>(
1308
+ effect: Effect.Effect<A, E2, R2>
1309
+ ) => Effect.Effect<Option.Option<A>, E | E2, R | R2>
1310
+ <A, E2, R2, E, R>(
1311
+ self: Effect.Effect<A, E2, R2>,
1312
+ condition: Effect.Effect<boolean, E, R>
1313
+ ): Effect.Effect<Option.Option<A>, E | E2, R | R2>
1314
+ } = dual(2, <A, E2, R2, E, R>(
1315
+ self: Effect.Effect<A, E2, R2>,
1316
+ condition: Effect.Effect<boolean, E, R>
1317
+ ): Effect.Effect<Option.Option<A>, E | E2, R | R2> =>
1257
1318
  flatMap(condition, (b) => {
1258
1319
  if (b) {
1259
1320
  return pipe(self, map(Option.some))
@@ -1262,13 +1323,13 @@ export const whenEffect = dual<
1262
1323
  }))
1263
1324
 
1264
1325
  /* @internal */
1265
- export const whileLoop = <R, E, A>(
1326
+ export const whileLoop = <A, E, R>(
1266
1327
  options: {
1267
1328
  readonly while: LazyArg<boolean>
1268
- readonly body: LazyArg<Effect.Effect<R, E, A>>
1329
+ readonly body: LazyArg<Effect.Effect<A, E, R>>
1269
1330
  readonly step: (a: A) => void
1270
1331
  }
1271
- ): Effect.Effect<R, E, void> => {
1332
+ ): Effect.Effect<void, E, R> => {
1272
1333
  const effect = new EffectPrimitive(OpCodes.OP_WHILE) as any
1273
1334
  effect.i0 = options.while
1274
1335
  effect.i1 = options.body
@@ -1281,20 +1342,20 @@ export const whileLoop = <R, E, A>(
1281
1342
 
1282
1343
  /* @internal */
1283
1344
  export const withConcurrency = dual<
1284
- (concurrency: number | "unbounded") => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1285
- <R, E, A>(self: Effect.Effect<R, E, A>, concurrency: number | "unbounded") => Effect.Effect<R, E, A>
1345
+ (concurrency: number | "unbounded") => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1346
+ <A, E, R>(self: Effect.Effect<A, E, R>, concurrency: number | "unbounded") => Effect.Effect<A, E, R>
1286
1347
  >(2, (self, concurrency) => fiberRefLocally(self, currentConcurrency, concurrency))
1287
1348
 
1288
1349
  /* @internal */
1289
1350
  export const withRequestBatching = dual<
1290
- (requestBatching: boolean) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1291
- <R, E, A>(self: Effect.Effect<R, E, A>, requestBatching: boolean) => Effect.Effect<R, E, A>
1351
+ (requestBatching: boolean) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1352
+ <A, E, R>(self: Effect.Effect<A, E, R>, requestBatching: boolean) => Effect.Effect<A, E, R>
1292
1353
  >(2, (self, requestBatching) => fiberRefLocally(self, currentRequestBatching, requestBatching))
1293
1354
 
1294
1355
  /* @internal */
1295
1356
  export const withRuntimeFlags = dual<
1296
- (update: RuntimeFlagsPatch.RuntimeFlagsPatch) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1297
- <R, E, A>(self: Effect.Effect<R, E, A>, update: RuntimeFlagsPatch.RuntimeFlagsPatch) => Effect.Effect<R, E, A>
1357
+ (update: RuntimeFlagsPatch.RuntimeFlagsPatch) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1358
+ <A, E, R>(self: Effect.Effect<A, E, R>, update: RuntimeFlagsPatch.RuntimeFlagsPatch) => Effect.Effect<A, E, R>
1298
1359
  >(2, (self, update) => {
1299
1360
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1300
1361
  effect.i0 = update
@@ -1304,8 +1365,8 @@ export const withRuntimeFlags = dual<
1304
1365
 
1305
1366
  /** @internal */
1306
1367
  export const withTracerTiming = dual<
1307
- (enabled: boolean) => <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1308
- <R, E, A>(effect: Effect.Effect<R, E, A>, enabled: boolean) => Effect.Effect<R, E, A>
1368
+ (enabled: boolean) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1369
+ <A, E, R>(effect: Effect.Effect<A, E, R>, enabled: boolean) => Effect.Effect<A, E, R>
1309
1370
  >(2, (effect, enabled) =>
1310
1371
  fiberRefLocally(
1311
1372
  effect,
@@ -1316,7 +1377,7 @@ export const withTracerTiming = dual<
1316
1377
  /* @internal */
1317
1378
  export const yieldNow = (options?: {
1318
1379
  readonly priority?: number | undefined
1319
- }): Effect.Effect<never, never, void> => {
1380
+ }): Effect.Effect<void> => {
1320
1381
  const effect = new EffectPrimitive(OpCodes.OP_YIELD) as any
1321
1382
  return typeof options?.priority !== "undefined" ?
1322
1383
  withSchedulingPriority(effect, options.priority) :
@@ -1325,73 +1386,83 @@ export const yieldNow = (options?: {
1325
1386
 
1326
1387
  /* @internal */
1327
1388
  export const zip = dual<
1328
- <R2, E2, A2>(
1329
- that: Effect.Effect<R2, E2, A2>
1330
- ) => <R, E, A>(
1331
- self: Effect.Effect<R, E, A>
1332
- ) => Effect.Effect<R | R2, E | E2, [A, A2]>,
1333
- <R, E, A, R2, E2, A2>(
1334
- self: Effect.Effect<R, E, A>,
1335
- that: Effect.Effect<R2, E2, A2>
1336
- ) => Effect.Effect<R | R2, E | E2, [A, A2]>
1337
- >(2, <R, E, A, R2, E2, A2>(
1338
- self: Effect.Effect<R, E, A>,
1339
- that: Effect.Effect<R2, E2, A2>
1340
- ): Effect.Effect<R | R2, E | E2, [A, A2]> => flatMap(self, (a) => map(that, (b) => [a, b])))
1341
-
1342
- /* @internal */
1343
- export const zipFlatten = dual<
1344
- <R2, E2, A2>(
1345
- that: Effect.Effect<R2, E2, A2>
1346
- ) => <R, E, A extends ReadonlyArray<any>>(
1347
- self: Effect.Effect<R, E, A>
1348
- ) => Effect.Effect<R | R2, E | E2, [...A, A2]>,
1349
- <R, E, A extends ReadonlyArray<any>, R2, E2, A2>(
1350
- self: Effect.Effect<R, E, A>,
1351
- that: Effect.Effect<R2, E2, A2>
1352
- ) => Effect.Effect<R | R2, E | E2, [...A, A2]>
1353
- >(2, <R, E, A extends ReadonlyArray<any>, R2, E2, A2>(
1354
- self: Effect.Effect<R, E, A>,
1355
- that: Effect.Effect<R2, E2, A2>
1356
- ): Effect.Effect<R | R2, E | E2, [...A, A2]> => flatMap(self, (a) => map(that, (b) => [...a, b] as [...A, A2])))
1357
-
1358
- /* @internal */
1359
- export const zipLeft = dual<
1360
- <R2, E2, A2>(
1361
- that: Effect.Effect<R2, E2, A2>
1362
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1363
- <R, E, A, R2, E2, A2>(
1364
- self: Effect.Effect<R, E, A>,
1365
- that: Effect.Effect<R2, E2, A2>
1366
- ) => Effect.Effect<R | R2, E | E2, A>
1367
- >(2, (self, that) => flatMap(self, (a) => as(that, a)))
1368
-
1369
- /* @internal */
1370
- export const zipRight = dual<
1371
- <R2, E2, A2>(
1372
- that: Effect.Effect<R2, E2, A2>
1373
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A2>,
1374
- <R, E, A, R2, E2, A2>(
1375
- self: Effect.Effect<R, E, A>,
1376
- that: Effect.Effect<R2, E2, A2>
1377
- ) => Effect.Effect<R | R2, E | E2, A2>
1378
- >(2, (self, that) => flatMap(self, () => that))
1379
-
1380
- /* @internal */
1381
- export const zipWith = dual<
1382
- <R2, E2, A2, A, B>(
1383
- that: Effect.Effect<R2, E2, A2>,
1389
+ <A2, E2, R2>(
1390
+ that: Effect.Effect<A2, E2, R2>
1391
+ ) => <A, E, R>(
1392
+ self: Effect.Effect<A, E, R>
1393
+ ) => Effect.Effect<[A, A2], E | E2, R | R2>,
1394
+ <A, E, R, A2, E2, R2>(
1395
+ self: Effect.Effect<A, E, R>,
1396
+ that: Effect.Effect<A2, E2, R2>
1397
+ ) => Effect.Effect<[A, A2], E | E2, R | R2>
1398
+ >(2, <A, E, R, A2, E2, R2>(
1399
+ self: Effect.Effect<A, E, R>,
1400
+ that: Effect.Effect<A2, E2, R2>
1401
+ ): Effect.Effect<[A, A2], E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => [a, b])))
1402
+
1403
+ /* @internal */
1404
+ export const zipFlatten: {
1405
+ <A2, E2, R2>(
1406
+ that: Effect.Effect<A2, E2, R2>
1407
+ ): <A extends ReadonlyArray<any>, E, R>(
1408
+ self: Effect.Effect<A, E, R>
1409
+ ) => Effect.Effect<[...A, A2], E | E2, R | R2>
1410
+ <A extends ReadonlyArray<any>, E, R, A2, E2, R2>(
1411
+ self: Effect.Effect<A, E, R>,
1412
+ that: Effect.Effect<A2, E2, R2>
1413
+ ): Effect.Effect<[...A, A2], E | E2, R | R2>
1414
+ } = dual(2, <A extends ReadonlyArray<any>, E, R, A2, E2, R2>(
1415
+ self: Effect.Effect<A, E, R>,
1416
+ that: Effect.Effect<A2, E2, R2>
1417
+ ): Effect.Effect<[...A, A2], E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => [...a, b])))
1418
+
1419
+ /* @internal */
1420
+ export const zipLeft: {
1421
+ <A2, E2, R2>(
1422
+ that: Effect.Effect<A2, E2, R2>
1423
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>
1424
+ <A, E, R, A2, E2, R2>(
1425
+ self: Effect.Effect<A, E, R>,
1426
+ that: Effect.Effect<A2, E2, R2>
1427
+ ): Effect.Effect<A, E | E2, R | R2>
1428
+ } = dual(2, <A, E, R, A2, E2, R2>(
1429
+ self: Effect.Effect<A, E, R>,
1430
+ that: Effect.Effect<A2, E2, R2>
1431
+ ): Effect.Effect<A, E | E2, R | R2> => flatMap(self, (a) => as(that, a)))
1432
+
1433
+ /* @internal */
1434
+ export const zipRight: {
1435
+ <A2, E2, R2>(
1436
+ that: Effect.Effect<A2, E2, R2>
1437
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2, E | E2, R | R2>
1438
+ <A, E, R, A2, E2, R2>(
1439
+ self: Effect.Effect<A, E, R>,
1440
+ that: Effect.Effect<A2, E2, R2>
1441
+ ): Effect.Effect<A2, E | E2, R | R2>
1442
+ } = dual(2, <A, E, R, A2, E2, R2>(
1443
+ self: Effect.Effect<A, E, R>,
1444
+ that: Effect.Effect<A2, E2, R2>
1445
+ ): Effect.Effect<A2, E | E2, R | R2> => flatMap(self, () => that))
1446
+
1447
+ /* @internal */
1448
+ export const zipWith: {
1449
+ <A2, E2, R2, A, B>(
1450
+ that: Effect.Effect<A2, E2, R2>,
1384
1451
  f: (a: A, b: A2) => B
1385
- ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, B>,
1386
- <R, E, R2, E2, A2, A, B>(
1387
- self: Effect.Effect<R, E, A>,
1388
- that: Effect.Effect<R2, E2, A2>,
1452
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E | E2, R | R2>
1453
+ <A, E, R, A2, E2, R2, B>(
1454
+ self: Effect.Effect<A, E, R>,
1455
+ that: Effect.Effect<A2, E2, R2>,
1389
1456
  f: (a: A, b: A2) => B
1390
- ) => Effect.Effect<R | R2, E | E2, B>
1391
- >(3, (self, that, f) => flatMap(self, (a) => map(that, (b) => f(a, b))))
1457
+ ): Effect.Effect<B, E | E2, R | R2>
1458
+ } = dual(3, <A, E, R, A2, E2, R2, B>(
1459
+ self: Effect.Effect<A, E, R>,
1460
+ that: Effect.Effect<A2, E2, R2>,
1461
+ f: (a: A, b: A2) => B
1462
+ ): Effect.Effect<B, E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => f(a, b))))
1392
1463
 
1393
1464
  /* @internal */
1394
- export const never: Effect.Effect<never, never, never> = asyncEither<never, never, never>(() => {
1465
+ export const never: Effect.Effect<never> = asyncEither<never>(() => {
1395
1466
  const interval = setInterval(() => {
1396
1467
  //
1397
1468
  }, 2 ** 31 - 1)
@@ -1403,13 +1474,13 @@ export const never: Effect.Effect<never, never, never> = asyncEither<never, neve
1403
1474
  // -----------------------------------------------------------------------------
1404
1475
 
1405
1476
  /* @internal */
1406
- export const interruptFiber = <E, A>(self: Fiber.Fiber<E, A>): Effect.Effect<never, never, Exit.Exit<E, A>> =>
1477
+ export const interruptFiber = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<Exit.Exit<A, E>> =>
1407
1478
  flatMap(fiberId, (fiberId) => pipe(self, interruptAsFiber(fiberId)))
1408
1479
 
1409
1480
  /* @internal */
1410
1481
  export const interruptAsFiber = dual<
1411
- (fiberId: FiberId.FiberId) => <E, A>(self: Fiber.Fiber<E, A>) => Effect.Effect<never, never, Exit.Exit<E, A>>,
1412
- <E, A>(self: Fiber.Fiber<E, A>, fiberId: FiberId.FiberId) => Effect.Effect<never, never, Exit.Exit<E, A>>
1482
+ (fiberId: FiberId.FiberId) => <A, E>(self: Fiber.Fiber<A, E>) => Effect.Effect<Exit.Exit<A, E>>,
1483
+ <A, E>(self: Fiber.Fiber<A, E>, fiberId: FiberId.FiberId) => Effect.Effect<Exit.Exit<A, E>>
1413
1484
  >(2, (self, fiberId) => flatMap(self.interruptAsFork(fiberId), () => self.await))
1414
1485
 
1415
1486
  // -----------------------------------------------------------------------------
@@ -1534,64 +1605,63 @@ const fiberRefVariance = {
1534
1605
  }
1535
1606
 
1536
1607
  /* @internal */
1537
- export const fiberRefGet = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<never, never, A> =>
1608
+ export const fiberRefGet = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<A> =>
1538
1609
  fiberRefModify(self, (a) => [a, a] as const)
1539
1610
 
1540
1611
  /* @internal */
1541
1612
  export const fiberRefGetAndSet = dual<
1542
- <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1543
- <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<never, never, A>
1613
+ <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1614
+ <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<A>
1544
1615
  >(2, (self, value) => fiberRefModify(self, (v) => [v, value] as const))
1545
1616
 
1546
1617
  /* @internal */
1547
1618
  export const fiberRefGetAndUpdate = dual<
1548
- <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1549
- <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<never, never, A>
1619
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1620
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<A>
1550
1621
  >(2, (self, f) => fiberRefModify(self, (v) => [v, f(v)] as const))
1551
1622
 
1552
1623
  /* @internal */
1553
1624
  export const fiberRefGetAndUpdateSome = dual<
1554
1625
  <A>(
1555
1626
  pf: (a: A) => Option.Option<A>
1556
- ) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1627
+ ) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1557
1628
  <A>(
1558
1629
  self: FiberRef.FiberRef<A>,
1559
1630
  pf: (a: A) => Option.Option<A>
1560
- ) => Effect.Effect<never, never, A>
1631
+ ) => Effect.Effect<A>
1561
1632
  >(2, (self, pf) => fiberRefModify(self, (v) => [v, Option.getOrElse(pf(v), () => v)] as const))
1562
1633
 
1563
1634
  /* @internal */
1564
1635
  export const fiberRefGetWith = dual<
1565
- <A, R, E, B>(f: (a: A) => Effect.Effect<R, E, B>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<R, E, B>,
1566
- <A, R, E, B>(self: FiberRef.FiberRef<A>, f: (a: A) => Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>
1636
+ <B, E, R, A>(f: (a: A) => Effect.Effect<B, E, R>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<B, E, R>,
1637
+ <A, B, E, R>(self: FiberRef.FiberRef<A>, f: (a: A) => Effect.Effect<B, E, R>) => Effect.Effect<B, E, R>
1567
1638
  >(2, (self, f) => flatMap(fiberRefGet(self), f))
1568
1639
 
1569
1640
  /* @internal */
1570
1641
  export const fiberRefSet = dual<
1571
- <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, void>,
1572
- <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<never, never, void>
1642
+ <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void>,
1643
+ <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<void>
1573
1644
  >(2, (self, value) => fiberRefModify(self, () => [void 0, value] as const))
1574
1645
 
1575
1646
  /* @internal */
1576
- export const fiberRefDelete = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<never, never, void> =>
1577
- withFiberRuntime<never, never, void>((state) => {
1647
+ export const fiberRefDelete = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<void> =>
1648
+ withFiberRuntime((state) => {
1578
1649
  state.unsafeDeleteFiberRef(self)
1579
1650
  return unit
1580
1651
  })
1581
1652
 
1582
1653
  /* @internal */
1583
- export const fiberRefReset = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<never, never, void> =>
1584
- fiberRefSet(self, self.initial)
1654
+ export const fiberRefReset = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<void> => fiberRefSet(self, self.initial)
1585
1655
 
1586
1656
  /* @internal */
1587
1657
  export const fiberRefModify = dual<
1588
- <A, B>(f: (a: A) => readonly [B, A]) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, B>,
1589
- <A, B>(self: FiberRef.FiberRef<A>, f: (a: A) => readonly [B, A]) => Effect.Effect<never, never, B>
1658
+ <A, B>(f: (a: A) => readonly [B, A]) => (self: FiberRef.FiberRef<A>) => Effect.Effect<B>,
1659
+ <A, B>(self: FiberRef.FiberRef<A>, f: (a: A) => readonly [B, A]) => Effect.Effect<B>
1590
1660
  >(2, <A, B>(
1591
1661
  self: FiberRef.FiberRef<A>,
1592
1662
  f: (a: A) => readonly [B, A]
1593
- ): Effect.Effect<never, never, B> =>
1594
- withFiberRuntime<never, never, B>((state) => {
1663
+ ): Effect.Effect<B> =>
1664
+ withFiberRuntime((state) => {
1595
1665
  const [b, a] = f(state.getFiberRef(self) as A)
1596
1666
  state.setFiberRef(self, a)
1597
1667
  return succeed(b)
@@ -1602,24 +1672,24 @@ export const fiberRefModifySome = <A, B>(
1602
1672
  self: FiberRef.FiberRef<A>,
1603
1673
  def: B,
1604
1674
  f: (a: A) => Option.Option<readonly [B, A]>
1605
- ): Effect.Effect<never, never, B> => fiberRefModify(self, (v) => Option.getOrElse(f(v), () => [def, v] as const))
1675
+ ): Effect.Effect<B> => fiberRefModify(self, (v) => Option.getOrElse(f(v), () => [def, v] as const))
1606
1676
 
1607
1677
  /* @internal */
1608
1678
  export const fiberRefUpdate = dual<
1609
- <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, void>,
1610
- <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<never, never, void>
1679
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void>,
1680
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<void>
1611
1681
  >(2, (self, f) => fiberRefModify(self, (v) => [void 0, f(v)] as const))
1612
1682
 
1613
1683
  /* @internal */
1614
1684
  export const fiberRefUpdateSome = dual<
1615
- <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, void>,
1616
- <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<never, never, void>
1685
+ <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void>,
1686
+ <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<void>
1617
1687
  >(2, (self, pf) => fiberRefModify(self, (v) => [void 0, Option.getOrElse(pf(v), () => v)] as const))
1618
1688
 
1619
1689
  /* @internal */
1620
1690
  export const fiberRefUpdateAndGet = dual<
1621
- <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1622
- <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<never, never, A>
1691
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1692
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<A>
1623
1693
  >(2, (self, f) =>
1624
1694
  fiberRefModify(self, (v) => {
1625
1695
  const result = f(v)
@@ -1628,8 +1698,8 @@ export const fiberRefUpdateAndGet = dual<
1628
1698
 
1629
1699
  /* @internal */
1630
1700
  export const fiberRefUpdateSomeAndGet = dual<
1631
- <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1632
- <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<never, never, A>
1701
+ <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1702
+ <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<A>
1633
1703
  >(2, (self, pf) =>
1634
1704
  fiberRefModify(self, (v) => {
1635
1705
  const result = Option.getOrElse(pf(v), () => v)
@@ -1658,7 +1728,7 @@ export class RequestResolverImpl<out R, in A> implements RequestResolver.Request
1658
1728
  constructor(
1659
1729
  readonly runAll: (
1660
1730
  requests: Array<Array<Request.Entry<A>>>
1661
- ) => Effect.Effect<R, never, void>,
1731
+ ) => Effect.Effect<void, never, R>,
1662
1732
  readonly target?: unknown
1663
1733
  ) {
1664
1734
  this.runAll = runAll as any
@@ -1736,22 +1806,22 @@ const LocallyReducer = <A>(
1736
1806
 
1737
1807
  /* @internal */
1738
1808
  export const fiberRefLocally: {
1739
- <A>(self: FiberRef.FiberRef<A>, value: A): <R, E, B>(use: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>
1740
- <R, E, B, A>(use: Effect.Effect<R, E, B>, self: FiberRef.FiberRef<A>, value: A): Effect.Effect<R, E, B>
1741
- } = dual<
1742
- <A>(self: FiberRef.FiberRef<A>, value: A) => <R, E, B>(use: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1743
- <R, E, B, A>(use: Effect.Effect<R, E, B>, self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<R, E, B>
1744
- >(3, (use, self, value) =>
1745
- acquireUseRelease(
1746
- zipLeft(fiberRefGet(self), fiberRefSet(self, value)),
1747
- () => use,
1748
- (oldValue) => fiberRefSet(self, oldValue)
1749
- ))
1809
+ <A>(self: FiberRef.FiberRef<A>, value: A): <B, E, R>(use: Effect.Effect<B, E, R>) => Effect.Effect<B, E, R>
1810
+ <B, E, R, A>(use: Effect.Effect<B, E, R>, self: FiberRef.FiberRef<A>, value: A): Effect.Effect<B, E, R>
1811
+ } = dual(
1812
+ 3,
1813
+ <B, E, R, A>(use: Effect.Effect<B, E, R>, self: FiberRef.FiberRef<A>, value: A): Effect.Effect<B, E, R> =>
1814
+ acquireUseRelease(
1815
+ zipLeft(fiberRefGet(self), fiberRefSet(self, value)),
1816
+ () => use,
1817
+ (oldValue) => fiberRefSet(self, oldValue)
1818
+ )
1819
+ )
1750
1820
 
1751
1821
  /* @internal */
1752
1822
  export const fiberRefLocallyWith = dual<
1753
- <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => <R, E, B>(use: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1754
- <R, E, B, A>(use: Effect.Effect<R, E, B>, self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<R, E, B>
1823
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => <B, E, R>(use: Effect.Effect<B, E, R>) => Effect.Effect<B, E, R>,
1824
+ <B, E, R, A>(use: Effect.Effect<B, E, R>, self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<B, E, R>
1755
1825
  >(3, (use, self, f) => fiberRefGetWith(self, (a) => fiberRefLocally(use, self, f(a))))
1756
1826
 
1757
1827
  /** @internal */
@@ -1869,14 +1939,14 @@ export const currentLogSpan: FiberRef.FiberRef<List.List<LogSpan.LogSpan>> = glo
1869
1939
 
1870
1940
  /** @internal */
1871
1941
  export const withSchedulingPriority = dual<
1872
- (priority: number) => <R, E, B>(self: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1873
- <R, E, B>(self: Effect.Effect<R, E, B>, priority: number) => Effect.Effect<R, E, B>
1942
+ (priority: number) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1943
+ <A, E, R>(self: Effect.Effect<A, E, R>, priority: number) => Effect.Effect<A, E, R>
1874
1944
  >(2, (self, scheduler) => fiberRefLocally(self, currentSchedulingPriority, scheduler))
1875
1945
 
1876
1946
  /** @internal */
1877
1947
  export const withMaxOpsBeforeYield = dual<
1878
- (priority: number) => <R, E, B>(self: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1879
- <R, E, B>(self: Effect.Effect<R, E, B>, priority: number) => Effect.Effect<R, E, B>
1948
+ (priority: number) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1949
+ <A, E, R>(self: Effect.Effect<A, E, R>, priority: number) => Effect.Effect<A, E, R>
1880
1950
  >(2, (self, scheduler) => fiberRefLocally(self, currentMaxOpsBeforeYield, scheduler))
1881
1951
 
1882
1952
  /** @internal */
@@ -1901,8 +1971,8 @@ export const currentUnhandledErrorLogLevel: FiberRef.FiberRef<Option.Option<LogL
1901
1971
 
1902
1972
  /** @internal */
1903
1973
  export const withUnhandledErrorLogLevel = dual<
1904
- (level: Option.Option<LogLevel.LogLevel>) => <R, E, B>(self: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1905
- <R, E, B>(self: Effect.Effect<R, E, B>, level: Option.Option<LogLevel.LogLevel>) => Effect.Effect<R, E, B>
1974
+ (level: Option.Option<LogLevel.LogLevel>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1975
+ <A, E, R>(self: Effect.Effect<A, E, R>, level: Option.Option<LogLevel.LogLevel>) => Effect.Effect<A, E, R>
1906
1976
  >(2, (self, level) => fiberRefLocally(self, currentUnhandledErrorLogLevel, level))
1907
1977
 
1908
1978
  /** @internal */
@@ -1912,7 +1982,7 @@ export const currentMetricLabels: FiberRef.FiberRef<ReadonlyArray<MetricLabel.Me
1912
1982
  )
1913
1983
 
1914
1984
  /* @internal */
1915
- export const metricLabels: Effect.Effect<never, never, ReadonlyArray<MetricLabel.MetricLabel>> = fiberRefGet(
1985
+ export const metricLabels: Effect.Effect<ReadonlyArray<MetricLabel.MetricLabel>> = fiberRefGet(
1916
1986
  currentMetricLabels
1917
1987
  )
1918
1988
 
@@ -1969,26 +2039,26 @@ export const CloseableScopeTypeId: Scope.CloseableScopeTypeId = Symbol.for(
1969
2039
  /* @internal */
1970
2040
  export const scopeAddFinalizer = (
1971
2041
  self: Scope.Scope,
1972
- finalizer: Effect.Effect<never, never, unknown>
1973
- ): Effect.Effect<never, never, void> => self.addFinalizer(() => asUnit(finalizer))
2042
+ finalizer: Effect.Effect<unknown>
2043
+ ): Effect.Effect<void> => self.addFinalizer(() => asUnit(finalizer))
1974
2044
 
1975
2045
  /* @internal */
1976
2046
  export const scopeAddFinalizerExit = (
1977
2047
  self: Scope.Scope,
1978
2048
  finalizer: Scope.Scope.Finalizer
1979
- ): Effect.Effect<never, never, void> => self.addFinalizer(finalizer)
2049
+ ): Effect.Effect<void> => self.addFinalizer(finalizer)
1980
2050
 
1981
2051
  /* @internal */
1982
2052
  export const scopeClose = (
1983
2053
  self: Scope.Scope.Closeable,
1984
2054
  exit: Exit.Exit<unknown, unknown>
1985
- ): Effect.Effect<never, never, void> => self.close(exit)
2055
+ ): Effect.Effect<void> => self.close(exit)
1986
2056
 
1987
2057
  /* @internal */
1988
2058
  export const scopeFork = (
1989
2059
  self: Scope.Scope,
1990
2060
  strategy: ExecutionStrategy.ExecutionStrategy
1991
- ): Effect.Effect<never, never, Scope.Scope.Closeable> => self.fork(strategy)
2061
+ ): Effect.Effect<Scope.Scope.Closeable> => self.fork(strategy)
1992
2062
 
1993
2063
  // -----------------------------------------------------------------------------
1994
2064
  // ReleaseMap
@@ -2014,8 +2084,8 @@ export interface ReleaseMap {
2014
2084
 
2015
2085
  /* @internal */
2016
2086
  export const releaseMapAdd = dual<
2017
- (finalizer: Scope.Scope.Finalizer) => (self: ReleaseMap) => Effect.Effect<never, never, Scope.Scope.Finalizer>,
2018
- (self: ReleaseMap, finalizer: Scope.Scope.Finalizer) => Effect.Effect<never, never, Scope.Scope.Finalizer>
2087
+ (finalizer: Scope.Scope.Finalizer) => (self: ReleaseMap) => Effect.Effect<Scope.Scope.Finalizer>,
2088
+ (self: ReleaseMap, finalizer: Scope.Scope.Finalizer) => Effect.Effect<Scope.Scope.Finalizer>
2019
2089
  >(2, (self, finalizer) =>
2020
2090
  map(
2021
2091
  releaseMapAddIfOpen(self, finalizer),
@@ -2027,8 +2097,8 @@ export const releaseMapAdd = dual<
2027
2097
 
2028
2098
  /* @internal */
2029
2099
  export const releaseMapRelease = dual<
2030
- (key: number, exit: Exit.Exit<unknown, unknown>) => (self: ReleaseMap) => Effect.Effect<never, never, void>,
2031
- (self: ReleaseMap, key: number, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<never, never, void>
2100
+ (key: number, exit: Exit.Exit<unknown, unknown>) => (self: ReleaseMap) => Effect.Effect<void>,
2101
+ (self: ReleaseMap, key: number, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>
2032
2102
  >(3, (self, key, exit) =>
2033
2103
  suspend(() => {
2034
2104
  switch (self.state._tag) {
@@ -2048,8 +2118,8 @@ export const releaseMapRelease = dual<
2048
2118
 
2049
2119
  /* @internal */
2050
2120
  export const releaseMapAddIfOpen = dual<
2051
- (finalizer: Scope.Scope.Finalizer) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<number>>,
2052
- (self: ReleaseMap, finalizer: Scope.Scope.Finalizer) => Effect.Effect<never, never, Option.Option<number>>
2121
+ (finalizer: Scope.Scope.Finalizer) => (self: ReleaseMap) => Effect.Effect<Option.Option<number>>,
2122
+ (self: ReleaseMap, finalizer: Scope.Scope.Finalizer) => Effect.Effect<Option.Option<number>>
2053
2123
  >(2, (self, finalizer) =>
2054
2124
  suspend(() => {
2055
2125
  switch (self.state._tag) {
@@ -2068,8 +2138,8 @@ export const releaseMapAddIfOpen = dual<
2068
2138
 
2069
2139
  /* @internal */
2070
2140
  export const releaseMapGet = dual<
2071
- (key: number) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>,
2072
- (self: ReleaseMap, key: number) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>
2141
+ (key: number) => (self: ReleaseMap) => Effect.Effect<Option.Option<Scope.Scope.Finalizer>>,
2142
+ (self: ReleaseMap, key: number) => Effect.Effect<Option.Option<Scope.Scope.Finalizer>>
2073
2143
  >(
2074
2144
  2,
2075
2145
  (self, key) =>
@@ -2083,12 +2153,12 @@ export const releaseMapReplace = dual<
2083
2153
  (
2084
2154
  key: number,
2085
2155
  finalizer: Scope.Scope.Finalizer
2086
- ) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>,
2156
+ ) => (self: ReleaseMap) => Effect.Effect<Option.Option<Scope.Scope.Finalizer>>,
2087
2157
  (
2088
2158
  self: ReleaseMap,
2089
2159
  key: number,
2090
2160
  finalizer: Scope.Scope.Finalizer
2091
- ) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>
2161
+ ) => Effect.Effect<Option.Option<Scope.Scope.Finalizer>>
2092
2162
  >(3, (self, key, finalizer) =>
2093
2163
  suspend(() => {
2094
2164
  switch (self.state._tag) {
@@ -2105,8 +2175,8 @@ export const releaseMapReplace = dual<
2105
2175
 
2106
2176
  /* @internal */
2107
2177
  export const releaseMapRemove = dual<
2108
- (key: number) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>,
2109
- (self: ReleaseMap, key: number) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>
2178
+ (key: number) => (self: ReleaseMap) => Effect.Effect<Option.Option<Scope.Scope.Finalizer>>,
2179
+ (self: ReleaseMap, key: number) => Effect.Effect<Option.Option<Scope.Scope.Finalizer>>
2110
2180
  >(2, (self, key) =>
2111
2181
  sync(() => {
2112
2182
  if (self.state._tag === "Exited") {
@@ -2118,7 +2188,7 @@ export const releaseMapRemove = dual<
2118
2188
  }))
2119
2189
 
2120
2190
  /* @internal */
2121
- export const releaseMapMake: Effect.Effect<never, never, ReleaseMap> = sync((): ReleaseMap => ({
2191
+ export const releaseMapMake: Effect.Effect<ReleaseMap> = sync((): ReleaseMap => ({
2122
2192
  state: {
2123
2193
  _tag: "Running",
2124
2194
  nextKey: 0,
@@ -2273,6 +2343,19 @@ export const InvalidPubSubCapacityException = makeException<Cause.InvalidPubSubC
2273
2343
  export const isInvalidCapacityError = (u: unknown): u is Cause.InvalidPubSubCapacityException =>
2274
2344
  hasProperty(u, InvalidPubSubCapacityExceptionTypeId)
2275
2345
 
2346
+ /** @internal */
2347
+ export const TimeoutExceptionTypeId: Cause.TimeoutExceptionTypeId = Symbol.for(
2348
+ "effect/Cause/errors/Timeout"
2349
+ ) as Cause.TimeoutExceptionTypeId
2350
+
2351
+ /** @internal */
2352
+ export const TimeoutException = makeException<Cause.TimeoutException>({
2353
+ [TimeoutExceptionTypeId]: TimeoutExceptionTypeId
2354
+ }, "TimeoutException")
2355
+
2356
+ /** @internal */
2357
+ export const isTimeoutException = (u: unknown): u is Cause.TimeoutException => hasProperty(u, TimeoutExceptionTypeId)
2358
+
2276
2359
  /** @internal */
2277
2360
  export const UnknownExceptionTypeId: Cause.UnknownExceptionTypeId = Symbol.for(
2278
2361
  "effect/Cause/errors/UnknownException"
@@ -2306,90 +2389,83 @@ export const exitIsExit = (u: unknown): u is Exit.Exit<unknown, unknown> =>
2306
2389
  isEffect(u) && "_tag" in u && (u._tag === "Success" || u._tag === "Failure")
2307
2390
 
2308
2391
  /** @internal */
2309
- export const exitIsFailure = <E, A>(self: Exit.Exit<E, A>): self is Exit.Failure<E, A> => self._tag === "Failure"
2392
+ export const exitIsFailure = <A, E>(self: Exit.Exit<A, E>): self is Exit.Failure<A, E> => self._tag === "Failure"
2310
2393
 
2311
2394
  /** @internal */
2312
- export const exitIsSuccess = <E, A>(self: Exit.Exit<E, A>): self is Exit.Success<E, A> => self._tag === "Success"
2395
+ export const exitIsSuccess = <A, E>(self: Exit.Exit<A, E>): self is Exit.Success<A, E> => self._tag === "Success"
2313
2396
 
2314
2397
  /** @internal */
2315
- export const exitIsInterrupted = <E, A>(self: Exit.Exit<E, A>): boolean => {
2398
+ export const exitIsInterrupted = <A, E>(self: Exit.Exit<A, E>): boolean => {
2316
2399
  switch (self._tag) {
2317
- case OpCodes.OP_FAILURE: {
2400
+ case OpCodes.OP_FAILURE:
2318
2401
  return internalCause.isInterrupted(self.i0)
2319
- }
2320
- case OpCodes.OP_SUCCESS: {
2402
+ case OpCodes.OP_SUCCESS:
2321
2403
  return false
2322
- }
2323
2404
  }
2324
2405
  }
2325
2406
 
2326
2407
  /** @internal */
2327
2408
  export const exitAs = dual<
2328
- <A2>(value: A2) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E, A2>,
2329
- <E, A, A2>(self: Exit.Exit<E, A>, value: A2) => Exit.Exit<E, A2>
2330
- >(2, <E, A, A2>(self: Exit.Exit<E, A>, value: A2) => {
2409
+ <A2>(value: A2) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E>,
2410
+ <A, E, A2>(self: Exit.Exit<A, E>, value: A2) => Exit.Exit<A2, E>
2411
+ >(2, <A, E, A2>(self: Exit.Exit<A, E>, value: A2): Exit.Exit<A2, E> => {
2331
2412
  switch (self._tag) {
2332
2413
  case OpCodes.OP_FAILURE: {
2333
2414
  return exitFailCause(self.i0)
2334
2415
  }
2335
2416
  case OpCodes.OP_SUCCESS: {
2336
- return exitSucceed(value) as Exit.Exit<E, A2>
2417
+ return exitSucceed(value) as Exit.Exit<A2, E>
2337
2418
  }
2338
2419
  }
2339
2420
  })
2340
2421
 
2341
2422
  /** @internal */
2342
- export const exitAsUnit = <E, A>(self: Exit.Exit<E, A>): Exit.Exit<E, void> =>
2343
- exitAs(self, void 0) as Exit.Exit<E, void>
2423
+ export const exitAsUnit = <A, E>(self: Exit.Exit<A, E>): Exit.Exit<void, E> => exitAs(self, void 0)
2344
2424
 
2345
2425
  /** @internal */
2346
- export const exitCauseOption = <E, A>(self: Exit.Exit<E, A>): Option.Option<Cause.Cause<E>> => {
2426
+ export const exitCauseOption = <A, E>(self: Exit.Exit<A, E>): Option.Option<Cause.Cause<E>> => {
2347
2427
  switch (self._tag) {
2348
- case OpCodes.OP_FAILURE: {
2428
+ case OpCodes.OP_FAILURE:
2349
2429
  return Option.some(self.i0)
2350
- }
2351
- case OpCodes.OP_SUCCESS: {
2430
+ case OpCodes.OP_SUCCESS:
2352
2431
  return Option.none()
2353
- }
2354
2432
  }
2355
2433
  }
2356
2434
 
2357
2435
  /** @internal */
2358
- export const exitCollectAll = <E, A>(
2359
- exits: Iterable<Exit.Exit<E, A>>,
2436
+ export const exitCollectAll = <A, E>(
2437
+ exits: Iterable<Exit.Exit<A, E>>,
2360
2438
  options?: {
2361
2439
  readonly parallel?: boolean | undefined
2362
2440
  }
2363
- ): Option.Option<Exit.Exit<E, Array<A>>> =>
2441
+ ): Option.Option<Exit.Exit<Array<A>, E>> =>
2364
2442
  exitCollectAllInternal(exits, options?.parallel ? internalCause.parallel : internalCause.sequential)
2365
2443
 
2366
2444
  /** @internal */
2367
- export const exitDie = (defect: unknown): Exit.Exit<never, never> =>
2368
- exitFailCause(internalCause.die(defect)) as Exit.Exit<never, never>
2445
+ export const exitDie = (defect: unknown): Exit.Exit<never> =>
2446
+ exitFailCause(internalCause.die(defect)) as Exit.Exit<never>
2369
2447
 
2370
2448
  /** @internal */
2371
2449
  export const exitExists: {
2372
- <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): <E>(self: Exit.Exit<E, A>) => self is Exit.Exit<never, B>
2373
- <A>(predicate: Predicate<NoInfer<A>>): <E>(self: Exit.Exit<E, A>) => boolean
2374
- <E, A, B extends A>(self: Exit.Exit<E, A>, refinement: Refinement<A, B>): self is Exit.Exit<never, B>
2375
- <E, A>(self: Exit.Exit<E, A>, predicate: Predicate<A>): boolean
2376
- } = dual(2, <E, A, B extends A>(self: Exit.Exit<E, A>, refinement: Refinement<A, B>): self is Exit.Exit<never, B> => {
2450
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): <E>(self: Exit.Exit<A, E>) => self is Exit.Exit<B>
2451
+ <A>(predicate: Predicate<NoInfer<A>>): <E>(self: Exit.Exit<A, E>) => boolean
2452
+ <A, E, B extends A>(self: Exit.Exit<A, E>, refinement: Refinement<A, B>): self is Exit.Exit<B>
2453
+ <A, E>(self: Exit.Exit<A, E>, predicate: Predicate<A>): boolean
2454
+ } = dual(2, <A, E, B extends A>(self: Exit.Exit<A, E>, refinement: Refinement<A, B>): self is Exit.Exit<B> => {
2377
2455
  switch (self._tag) {
2378
- case OpCodes.OP_FAILURE: {
2456
+ case OpCodes.OP_FAILURE:
2379
2457
  return false
2380
- }
2381
- case OpCodes.OP_SUCCESS: {
2458
+ case OpCodes.OP_SUCCESS:
2382
2459
  return refinement(self.i0)
2383
- }
2384
2460
  }
2385
2461
  })
2386
2462
 
2387
2463
  /** @internal */
2388
- export const exitFail = <E>(error: E): Exit.Exit<E, never> =>
2389
- exitFailCause(internalCause.fail(error)) as Exit.Exit<E, never>
2464
+ export const exitFail = <E>(error: E): Exit.Exit<never, E> =>
2465
+ exitFailCause(internalCause.fail(error)) as Exit.Exit<never, E>
2390
2466
 
2391
2467
  /** @internal */
2392
- export const exitFailCause = <E>(cause: Cause.Cause<E>): Exit.Exit<E, never> => {
2468
+ export const exitFailCause = <E>(cause: Cause.Cause<E>): Exit.Exit<never, E> => {
2393
2469
  const effect = new EffectPrimitiveFailure(OpCodes.OP_FAILURE) as any
2394
2470
  effect.i0 = cause
2395
2471
  return effect
@@ -2397,29 +2473,32 @@ export const exitFailCause = <E>(cause: Cause.Cause<E>): Exit.Exit<E, never> =>
2397
2473
 
2398
2474
  /** @internal */
2399
2475
  export const exitFlatMap = dual<
2400
- <A, E2, A2>(f: (a: A) => Exit.Exit<E2, A2>) => <E>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A2>,
2401
- <E, A, E2, A2>(self: Exit.Exit<E, A>, f: (a: A) => Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A2>
2402
- >(2, <E, A, E2, A2>(self: Exit.Exit<E, A>, f: (a: A) => Exit.Exit<E2, A2>) => {
2476
+ <A, A2, E2>(f: (a: A) => Exit.Exit<A2, E2>) => <E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E | E2>,
2477
+ <A, E, E2, A2>(self: Exit.Exit<A, E>, f: (a: A) => Exit.Exit<A2, E2>) => Exit.Exit<A2, E | E2>
2478
+ >(2, <A, E, E2, A2>(self: Exit.Exit<A, E>, f: (a: A) => Exit.Exit<A2, E2>): Exit.Exit<A2, E | E2> => {
2403
2479
  switch (self._tag) {
2404
2480
  case OpCodes.OP_FAILURE: {
2405
- return exitFailCause(self.i0) as Exit.Exit<E | E2, A2>
2481
+ return exitFailCause(self.i0)
2406
2482
  }
2407
2483
  case OpCodes.OP_SUCCESS: {
2408
- return f(self.i0) as Exit.Exit<E | E2, A2>
2484
+ return f(self.i0)
2409
2485
  }
2410
2486
  }
2411
2487
  })
2412
2488
 
2413
2489
  /** @internal */
2414
- export const exitFlatMapEffect = dual<
2415
- <E, A, R, E2, A2>(
2416
- f: (a: A) => Effect.Effect<R, E2, Exit.Exit<E, A2>>
2417
- ) => (self: Exit.Exit<E, A>) => Effect.Effect<R, E2, Exit.Exit<E, A2>>,
2418
- <E, A, R, E2, A2>(
2419
- self: Exit.Exit<E, A>,
2420
- f: (a: A) => Effect.Effect<R, E2, Exit.Exit<E, A2>>
2421
- ) => Effect.Effect<R, E2, Exit.Exit<E, A2>>
2422
- >(2, (self, f) => {
2490
+ export const exitFlatMapEffect: {
2491
+ <A, E, A2, E2, R>(
2492
+ f: (a: A) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2493
+ ): (self: Exit.Exit<A, E>) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2494
+ <A, E, A2, E2, R>(
2495
+ self: Exit.Exit<A, E>,
2496
+ f: (a: A) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2497
+ ): Effect.Effect<Exit.Exit<A2, E>, E2, R>
2498
+ } = dual(2, <A, E, A2, E2, R>(
2499
+ self: Exit.Exit<A, E>,
2500
+ f: (a: A) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2501
+ ): Effect.Effect<Exit.Exit<A2, E>, E2, R> => {
2423
2502
  switch (self._tag) {
2424
2503
  case OpCodes.OP_FAILURE: {
2425
2504
  return succeed(exitFailCause(self.i0))
@@ -2431,20 +2510,23 @@ export const exitFlatMapEffect = dual<
2431
2510
  })
2432
2511
 
2433
2512
  /** @internal */
2434
- export const exitFlatten = <E, E1, A>(
2435
- self: Exit.Exit<E, Exit.Exit<E1, A>>
2436
- ): Exit.Exit<E | E1, A> => pipe(self, exitFlatMap(identity)) as Exit.Exit<E | E1, A>
2513
+ export const exitFlatten = <A, E, E2>(
2514
+ self: Exit.Exit<Exit.Exit<A, E>, E2>
2515
+ ): Exit.Exit<A, E | E2> => pipe(self, exitFlatMap(identity))
2437
2516
 
2438
2517
  /** @internal */
2439
- export const exitForEachEffect = dual<
2440
- <A, R, E2, B>(
2441
- f: (a: A) => Effect.Effect<R, E2, B>
2442
- ) => <E>(self: Exit.Exit<E, A>) => Effect.Effect<R, never, Exit.Exit<E | E2, B>>,
2443
- <E, A, R, E2, B>(
2444
- self: Exit.Exit<E, A>,
2445
- f: (a: A) => Effect.Effect<R, E2, B>
2446
- ) => Effect.Effect<R, never, Exit.Exit<E | E2, B>>
2447
- >(2, (self, f) => {
2518
+ export const exitForEachEffect: {
2519
+ <A, B, E2, R>(
2520
+ f: (a: A) => Effect.Effect<B, E2, R>
2521
+ ): <E>(self: Exit.Exit<A, E>) => Effect.Effect<Exit.Exit<B, E | E2>, never, R>
2522
+ <A, E, B, E2, R>(
2523
+ self: Exit.Exit<A, E>,
2524
+ f: (a: A) => Effect.Effect<B, E2, R>
2525
+ ): Effect.Effect<Exit.Exit<B, E | E2>, never, R>
2526
+ } = dual(2, <A, E, B, E2, R>(
2527
+ self: Exit.Exit<A, E>,
2528
+ f: (a: A) => Effect.Effect<B, E2, R>
2529
+ ): Effect.Effect<Exit.Exit<B, E | E2>, never, R> => {
2448
2530
  switch (self._tag) {
2449
2531
  case OpCodes.OP_FAILURE: {
2450
2532
  return succeed(exitFailCause(self.i0))
@@ -2456,60 +2538,52 @@ export const exitForEachEffect = dual<
2456
2538
  })
2457
2539
 
2458
2540
  /** @internal */
2459
- export const exitFromEither = <E, A>(either: Either.Either<E, A>): Exit.Exit<E, A> => {
2541
+ export const exitFromEither = <E, A>(either: Either.Either<E, A>): Exit.Exit<A, E> => {
2460
2542
  switch (either._tag) {
2461
- case "Left": {
2462
- return exitFail(either.left) as Exit.Exit<E, A>
2463
- }
2464
- case "Right": {
2465
- return exitSucceed(either.right) as Exit.Exit<E, A>
2466
- }
2543
+ case "Left":
2544
+ return exitFail(either.left)
2545
+ case "Right":
2546
+ return exitSucceed(either.right)
2467
2547
  }
2468
2548
  }
2469
2549
 
2470
2550
  /** @internal */
2471
- export const exitFromOption = <A>(option: Option.Option<A>): Exit.Exit<void, A> => {
2551
+ export const exitFromOption = <A>(option: Option.Option<A>): Exit.Exit<A, void> => {
2472
2552
  switch (option._tag) {
2473
- case "None": {
2474
- return exitFail(void 0) as Exit.Exit<void, A>
2475
- }
2476
- case "Some": {
2477
- return exitSucceed(option.value) as Exit.Exit<void, A>
2478
- }
2553
+ case "None":
2554
+ return exitFail(void 0)
2555
+ case "Some":
2556
+ return exitSucceed(option.value)
2479
2557
  }
2480
2558
  }
2481
2559
 
2482
2560
  /** @internal */
2483
2561
  export const exitGetOrElse = dual<
2484
- <E, A2>(orElse: (cause: Cause.Cause<E>) => A2) => <A1>(self: Exit.Exit<E, A1>) => A1 | A2,
2485
- <E, A1, A2>(self: Exit.Exit<E, A1>, orElse: (cause: Cause.Cause<E>) => A2) => A1 | A2
2562
+ <E, A2>(orElse: (cause: Cause.Cause<E>) => A2) => <A>(self: Exit.Exit<A, E>) => A | A2,
2563
+ <A, E, A2>(self: Exit.Exit<A, E>, orElse: (cause: Cause.Cause<E>) => A2) => A | A2
2486
2564
  >(2, (self, orElse) => {
2487
2565
  switch (self._tag) {
2488
- case OpCodes.OP_FAILURE: {
2566
+ case OpCodes.OP_FAILURE:
2489
2567
  return orElse(self.i0)
2490
- }
2491
- case OpCodes.OP_SUCCESS: {
2568
+ case OpCodes.OP_SUCCESS:
2492
2569
  return self.i0
2493
- }
2494
2570
  }
2495
2571
  })
2496
2572
 
2497
2573
  /** @internal */
2498
- export const exitInterrupt = (fiberId: FiberId.FiberId): Exit.Exit<never, never> =>
2499
- exitFailCause(internalCause.interrupt(fiberId)) as Exit.Exit<never, never>
2574
+ export const exitInterrupt = (fiberId: FiberId.FiberId): Exit.Exit<never> =>
2575
+ exitFailCause(internalCause.interrupt(fiberId))
2500
2576
 
2501
2577
  /** @internal */
2502
2578
  export const exitMap = dual<
2503
- <A, B>(f: (a: A) => B) => <E>(self: Exit.Exit<E, A>) => Exit.Exit<E, B>,
2504
- <E, A, B>(self: Exit.Exit<E, A>, f: (a: A) => B) => Exit.Exit<E, B>
2505
- >(2, <E, A, B>(self: Exit.Exit<E, A>, f: (a: A) => B) => {
2579
+ <A, B>(f: (a: A) => B) => <E>(self: Exit.Exit<A, E>) => Exit.Exit<B, E>,
2580
+ <A, E, B>(self: Exit.Exit<A, E>, f: (a: A) => B) => Exit.Exit<B, E>
2581
+ >(2, (self, f) => {
2506
2582
  switch (self._tag) {
2507
- case OpCodes.OP_FAILURE: {
2508
- return exitFailCause(self.i0) as Exit.Exit<E, B>
2509
- }
2510
- case OpCodes.OP_SUCCESS: {
2511
- return exitSucceed(f(self.i0)) as Exit.Exit<E, B>
2512
- }
2583
+ case OpCodes.OP_FAILURE:
2584
+ return exitFailCause(self.i0)
2585
+ case OpCodes.OP_SUCCESS:
2586
+ return exitSucceed(f(self.i0))
2513
2587
  }
2514
2588
  })
2515
2589
 
@@ -2520,52 +2594,46 @@ export const exitMapBoth = dual<
2520
2594
  readonly onFailure: (e: E) => E2
2521
2595
  readonly onSuccess: (a: A) => A2
2522
2596
  }
2523
- ) => (self: Exit.Exit<E, A>) => Exit.Exit<E2, A2>,
2524
- <E, A, E2, A2>(
2525
- self: Exit.Exit<E, A>,
2597
+ ) => (self: Exit.Exit<A, E>) => Exit.Exit<A2, E2>,
2598
+ <A, E, E2, A2>(
2599
+ self: Exit.Exit<A, E>,
2526
2600
  options: {
2527
2601
  readonly onFailure: (e: E) => E2
2528
2602
  readonly onSuccess: (a: A) => A2
2529
2603
  }
2530
- ) => Exit.Exit<E2, A2>
2604
+ ) => Exit.Exit<A2, E2>
2531
2605
  >(2, (self, { onFailure, onSuccess }) => {
2532
2606
  switch (self._tag) {
2533
- case OpCodes.OP_FAILURE: {
2607
+ case OpCodes.OP_FAILURE:
2534
2608
  return exitFailCause(pipe(self.i0, internalCause.map(onFailure)))
2535
- }
2536
- case OpCodes.OP_SUCCESS: {
2609
+ case OpCodes.OP_SUCCESS:
2537
2610
  return exitSucceed(onSuccess(self.i0))
2538
- }
2539
2611
  }
2540
2612
  })
2541
2613
 
2542
2614
  /** @internal */
2543
2615
  export const exitMapError = dual<
2544
- <E, E2>(f: (e: E) => E2) => <A>(self: Exit.Exit<E, A>) => Exit.Exit<E2, A>,
2545
- <E, A, E2>(self: Exit.Exit<E, A>, f: (e: E) => E2) => Exit.Exit<E2, A>
2546
- >(2, <E, A, E2>(self: Exit.Exit<E, A>, f: (e: E) => E2) => {
2616
+ <E, E2>(f: (e: E) => E2) => <A>(self: Exit.Exit<A, E>) => Exit.Exit<A, E2>,
2617
+ <A, E, E2>(self: Exit.Exit<A, E>, f: (e: E) => E2) => Exit.Exit<A, E2>
2618
+ >(2, (self, f) => {
2547
2619
  switch (self._tag) {
2548
- case OpCodes.OP_FAILURE: {
2549
- return exitFailCause(pipe(self.i0, internalCause.map(f))) as Exit.Exit<E2, A>
2550
- }
2551
- case OpCodes.OP_SUCCESS: {
2552
- return exitSucceed(self.i0) as Exit.Exit<E2, A>
2553
- }
2620
+ case OpCodes.OP_FAILURE:
2621
+ return exitFailCause(pipe(self.i0, internalCause.map(f)))
2622
+ case OpCodes.OP_SUCCESS:
2623
+ return exitSucceed(self.i0)
2554
2624
  }
2555
2625
  })
2556
2626
 
2557
2627
  /** @internal */
2558
2628
  export const exitMapErrorCause = dual<
2559
- <E, E2>(f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => <A>(self: Exit.Exit<E, A>) => Exit.Exit<E2, A>,
2560
- <E, A, E2>(self: Exit.Exit<E, A>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => Exit.Exit<E2, A>
2561
- >(2, <E, A, E2>(self: Exit.Exit<E, A>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => {
2629
+ <E, E2>(f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => <A>(self: Exit.Exit<A, E>) => Exit.Exit<A, E2>,
2630
+ <E, A, E2>(self: Exit.Exit<A, E>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => Exit.Exit<A, E2>
2631
+ >(2, (self, f) => {
2562
2632
  switch (self._tag) {
2563
- case OpCodes.OP_FAILURE: {
2564
- return exitFailCause(f(self.i0)) as Exit.Exit<E2, A>
2565
- }
2566
- case OpCodes.OP_SUCCESS: {
2567
- return exitSucceed(self.i0) as Exit.Exit<E2, A>
2568
- }
2633
+ case OpCodes.OP_FAILURE:
2634
+ return exitFailCause(f(self.i0))
2635
+ case OpCodes.OP_SUCCESS:
2636
+ return exitSucceed(self.i0)
2569
2637
  }
2570
2638
  })
2571
2639
 
@@ -2574,62 +2642,58 @@ export const exitMatch = dual<
2574
2642
  <E, A, Z1, Z2>(options: {
2575
2643
  readonly onFailure: (cause: Cause.Cause<E>) => Z1
2576
2644
  readonly onSuccess: (a: A) => Z2
2577
- }) => (self: Exit.Exit<E, A>) => Z1 | Z2,
2578
- <E, A, Z1, Z2>(self: Exit.Exit<E, A>, options: {
2645
+ }) => (self: Exit.Exit<A, E>) => Z1 | Z2,
2646
+ <A, E, Z1, Z2>(self: Exit.Exit<A, E>, options: {
2579
2647
  readonly onFailure: (cause: Cause.Cause<E>) => Z1
2580
2648
  readonly onSuccess: (a: A) => Z2
2581
2649
  }) => Z1 | Z2
2582
2650
  >(2, (self, { onFailure, onSuccess }) => {
2583
2651
  switch (self._tag) {
2584
- case OpCodes.OP_FAILURE: {
2652
+ case OpCodes.OP_FAILURE:
2585
2653
  return onFailure(self.i0)
2586
- }
2587
- case OpCodes.OP_SUCCESS: {
2654
+ case OpCodes.OP_SUCCESS:
2588
2655
  return onSuccess(self.i0)
2589
- }
2590
2656
  }
2591
2657
  })
2592
2658
 
2593
2659
  /** @internal */
2594
2660
  export const exitMatchEffect = dual<
2595
- <E, A, R, E2, A2, R2, E3, A3>(
2661
+ <E, A2, E2, R, A, A3, E3, R2>(
2596
2662
  options: {
2597
- readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R, E2, A2>
2598
- readonly onSuccess: (a: A) => Effect.Effect<R2, E3, A3>
2663
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R>
2664
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R2>
2599
2665
  }
2600
- ) => (self: Exit.Exit<E, A>) => Effect.Effect<R | R2, E2 | E3, A2 | A3>,
2601
- <E, A, R, E2, A2, R2, E3, A3>(
2602
- self: Exit.Exit<E, A>,
2666
+ ) => (self: Exit.Exit<A, E>) => Effect.Effect<A2 | A3, E2 | E3, R | R2>,
2667
+ <A, E, A2, E2, R, A3, E3, R2>(
2668
+ self: Exit.Exit<A, E>,
2603
2669
  options: {
2604
- readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R, E2, A2>
2605
- readonly onSuccess: (a: A) => Effect.Effect<R2, E3, A3>
2670
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R>
2671
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R2>
2606
2672
  }
2607
- ) => Effect.Effect<R | R2, E2 | E3, A2 | A3>
2673
+ ) => Effect.Effect<A2 | A3, E2 | E3, R | R2>
2608
2674
  >(2, (self, { onFailure, onSuccess }) => {
2609
2675
  switch (self._tag) {
2610
- case OpCodes.OP_FAILURE: {
2676
+ case OpCodes.OP_FAILURE:
2611
2677
  return onFailure(self.i0)
2612
- }
2613
- case OpCodes.OP_SUCCESS: {
2678
+ case OpCodes.OP_SUCCESS:
2614
2679
  return onSuccess(self.i0)
2615
- }
2616
2680
  }
2617
2681
  })
2618
2682
 
2619
2683
  /** @internal */
2620
- export const exitSucceed = <A>(value: A): Exit.Exit<never, A> => {
2684
+ export const exitSucceed = <A>(value: A): Exit.Exit<A> => {
2621
2685
  const effect = new EffectPrimitiveSuccess(OpCodes.OP_SUCCESS) as any
2622
2686
  effect.i0 = value
2623
2687
  return effect
2624
2688
  }
2625
2689
 
2626
2690
  /** @internal */
2627
- export const exitUnit: Exit.Exit<never, void> = exitSucceed(void 0)
2691
+ export const exitUnit: Exit.Exit<void> = exitSucceed(void 0)
2628
2692
 
2629
2693
  /** @internal */
2630
2694
  export const exitZip = dual<
2631
- <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, [A, A2]>,
2632
- <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, [A, A2]>
2695
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<[A, A2], E | E2>,
2696
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<[A, A2], E | E2>
2633
2697
  >(2, (self, that) =>
2634
2698
  exitZipWith(self, that, {
2635
2699
  onSuccess: (a, a2) => [a, a2],
@@ -2638,8 +2702,8 @@ export const exitZip = dual<
2638
2702
 
2639
2703
  /** @internal */
2640
2704
  export const exitZipLeft = dual<
2641
- <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A>,
2642
- <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A>
2705
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A, E | E2>,
2706
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A, E | E2>
2643
2707
  >(2, (self, that) =>
2644
2708
  exitZipWith(self, that, {
2645
2709
  onSuccess: (a, _) => a,
@@ -2648,8 +2712,8 @@ export const exitZipLeft = dual<
2648
2712
 
2649
2713
  /** @internal */
2650
2714
  export const exitZipRight = dual<
2651
- <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A2>,
2652
- <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A2>
2715
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E | E2>,
2716
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A2, E | E2>
2653
2717
  >(2, (self, that) =>
2654
2718
  exitZipWith(self, that, {
2655
2719
  onSuccess: (_, a2) => a2,
@@ -2658,8 +2722,8 @@ export const exitZipRight = dual<
2658
2722
 
2659
2723
  /** @internal */
2660
2724
  export const exitZipPar = dual<
2661
- <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, [A, A2]>,
2662
- <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, [A, A2]>
2725
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<[A, A2], E | E2>,
2726
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<[A, A2], E | E2>
2663
2727
  >(2, (self, that) =>
2664
2728
  exitZipWith(self, that, {
2665
2729
  onSuccess: (a, a2) => [a, a2],
@@ -2668,8 +2732,8 @@ export const exitZipPar = dual<
2668
2732
 
2669
2733
  /** @internal */
2670
2734
  export const exitZipParLeft = dual<
2671
- <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A>,
2672
- <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A>
2735
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A, E | E2>,
2736
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A, E | E2>
2673
2737
  >(2, (self, that) =>
2674
2738
  exitZipWith(self, that, {
2675
2739
  onSuccess: (a, _) => a,
@@ -2678,8 +2742,8 @@ export const exitZipParLeft = dual<
2678
2742
 
2679
2743
  /** @internal */
2680
2744
  export const exitZipParRight = dual<
2681
- <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A2>,
2682
- <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A2>
2745
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E | E2>,
2746
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A2, E | E2>
2683
2747
  >(2, (self, that) =>
2684
2748
  exitZipWith(self, that, {
2685
2749
  onSuccess: (_, a2) => a2,
@@ -2688,21 +2752,21 @@ export const exitZipParRight = dual<
2688
2752
 
2689
2753
  /** @internal */
2690
2754
  export const exitZipWith = dual<
2691
- <E, E2, A, B, C>(
2692
- that: Exit.Exit<E2, B>,
2755
+ <B, E2, A, C, E>(
2756
+ that: Exit.Exit<B, E2>,
2693
2757
  options: {
2694
2758
  readonly onSuccess: (a: A, b: B) => C
2695
2759
  readonly onFailure: (cause: Cause.Cause<E>, cause2: Cause.Cause<E2>) => Cause.Cause<E | E2>
2696
2760
  }
2697
- ) => (self: Exit.Exit<E, A>) => Exit.Exit<E | E2, C>,
2698
- <E, E2, A, B, C>(
2699
- self: Exit.Exit<E, A>,
2700
- that: Exit.Exit<E2, B>,
2761
+ ) => (self: Exit.Exit<A, E>) => Exit.Exit<C, E | E2>,
2762
+ <A, E, B, E2, C>(
2763
+ self: Exit.Exit<A, E>,
2764
+ that: Exit.Exit<B, E2>,
2701
2765
  options: {
2702
2766
  readonly onSuccess: (a: A, b: B) => C
2703
2767
  readonly onFailure: (cause: Cause.Cause<E>, cause2: Cause.Cause<E2>) => Cause.Cause<E | E2>
2704
2768
  }
2705
- ) => Exit.Exit<E | E2, C>
2769
+ ) => Exit.Exit<C, E | E2>
2706
2770
  >(3, (
2707
2771
  self,
2708
2772
  that,
@@ -2711,9 +2775,8 @@ export const exitZipWith = dual<
2711
2775
  switch (self._tag) {
2712
2776
  case OpCodes.OP_FAILURE: {
2713
2777
  switch (that._tag) {
2714
- case OpCodes.OP_SUCCESS: {
2778
+ case OpCodes.OP_SUCCESS:
2715
2779
  return exitFailCause(self.i0)
2716
- }
2717
2780
  case OpCodes.OP_FAILURE: {
2718
2781
  return exitFailCause(onFailure(self.i0, that.i0))
2719
2782
  }
@@ -2721,21 +2784,19 @@ export const exitZipWith = dual<
2721
2784
  }
2722
2785
  case OpCodes.OP_SUCCESS: {
2723
2786
  switch (that._tag) {
2724
- case OpCodes.OP_SUCCESS: {
2787
+ case OpCodes.OP_SUCCESS:
2725
2788
  return exitSucceed(onSuccess(self.i0, that.i0))
2726
- }
2727
- case OpCodes.OP_FAILURE: {
2789
+ case OpCodes.OP_FAILURE:
2728
2790
  return exitFailCause(that.i0)
2729
- }
2730
2791
  }
2731
2792
  }
2732
2793
  }
2733
2794
  })
2734
2795
 
2735
- const exitCollectAllInternal = <E, A>(
2736
- exits: Iterable<Exit.Exit<E, A>>,
2796
+ const exitCollectAllInternal = <A, E>(
2797
+ exits: Iterable<Exit.Exit<A, E>>,
2737
2798
  combineCauses: (causeA: Cause.Cause<E>, causeB: Cause.Cause<E>) => Cause.Cause<E>
2738
- ): Option.Option<Exit.Exit<E, Array<A>>> => {
2799
+ ): Option.Option<Exit.Exit<Array<A>, E>> => {
2739
2800
  const list = Chunk.fromIterable(exits)
2740
2801
  if (!Chunk.isNonEmpty(list)) {
2741
2802
  return Option.none()
@@ -2764,7 +2825,7 @@ const exitCollectAllInternal = <E, A>(
2764
2825
  // -----------------------------------------------------------------------------
2765
2826
 
2766
2827
  /** @internal */
2767
- export const deferredUnsafeMake = <E, A>(fiberId: FiberId.FiberId): Deferred.Deferred<E, A> => ({
2828
+ export const deferredUnsafeMake = <A, E = never>(fiberId: FiberId.FiberId): Deferred.Deferred<A, E> => ({
2768
2829
  [deferred.DeferredTypeId]: deferred.deferredVariance,
2769
2830
  state: MutableRef.make(deferred.pending([])),
2770
2831
  blockingOn: fiberId,
@@ -2774,16 +2835,16 @@ export const deferredUnsafeMake = <E, A>(fiberId: FiberId.FiberId): Deferred.Def
2774
2835
  })
2775
2836
 
2776
2837
  /* @internal */
2777
- export const deferredMake = <E, A>(): Effect.Effect<never, never, Deferred.Deferred<E, A>> =>
2778
- flatMap(fiberId, (id) => deferredMakeAs<E, A>(id))
2838
+ export const deferredMake = <A, E = never>(): Effect.Effect<Deferred.Deferred<A, E>> =>
2839
+ flatMap(fiberId, (id) => deferredMakeAs<A, E>(id))
2779
2840
 
2780
2841
  /* @internal */
2781
- export const deferredMakeAs = <E, A>(fiberId: FiberId.FiberId): Effect.Effect<never, never, Deferred.Deferred<E, A>> =>
2782
- sync(() => deferredUnsafeMake<E, A>(fiberId))
2842
+ export const deferredMakeAs = <A, E = never>(fiberId: FiberId.FiberId): Effect.Effect<Deferred.Deferred<A, E>> =>
2843
+ sync(() => deferredUnsafeMake<A, E>(fiberId))
2783
2844
 
2784
2845
  /* @internal */
2785
- export const deferredAwait = <E, A>(self: Deferred.Deferred<E, A>): Effect.Effect<never, E, A> =>
2786
- asyncEither<never, E, A>((k) => {
2846
+ export const deferredAwait = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<A, E> =>
2847
+ asyncEither<A, E>((k) => {
2787
2848
  const state = MutableRef.get(self.state)
2788
2849
  switch (state._tag) {
2789
2850
  case DeferredOpCodes.OP_STATE_DONE: {
@@ -2800,15 +2861,19 @@ export const deferredAwait = <E, A>(self: Deferred.Deferred<E, A>): Effect.Effec
2800
2861
  }, self.blockingOn)
2801
2862
 
2802
2863
  /* @internal */
2803
- export const deferredComplete = dual<
2804
- <E, A>(effect: Effect.Effect<never, E, A>) => (self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2805
- <E, A>(self: Deferred.Deferred<E, A>, effect: Effect.Effect<never, E, A>) => Effect.Effect<never, never, boolean>
2806
- >(2, (self, effect) => intoDeferred(effect, self))
2864
+ export const deferredComplete: {
2865
+ <A, E>(effect: Effect.Effect<A, E>): (self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>
2866
+ <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>): Effect.Effect<boolean>
2867
+ } = dual(
2868
+ 2,
2869
+ <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>): Effect.Effect<boolean> =>
2870
+ intoDeferred(effect, self)
2871
+ )
2807
2872
 
2808
2873
  /* @internal */
2809
2874
  export const deferredCompleteWith = dual<
2810
- <E, A>(effect: Effect.Effect<never, E, A>) => (self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2811
- <E, A>(self: Deferred.Deferred<E, A>, effect: Effect.Effect<never, E, A>) => Effect.Effect<never, never, boolean>
2875
+ <A, E>(effect: Effect.Effect<A, E>) => (self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2876
+ <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>) => Effect.Effect<boolean>
2812
2877
  >(2, (self, effect) =>
2813
2878
  sync(() => {
2814
2879
  const state = MutableRef.get(self.state)
@@ -2828,64 +2893,64 @@ export const deferredCompleteWith = dual<
2828
2893
 
2829
2894
  /* @internal */
2830
2895
  export const deferredDone = dual<
2831
- <E, A>(exit: Exit.Exit<E, A>) => (self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2832
- <E, A>(self: Deferred.Deferred<E, A>, exit: Exit.Exit<E, A>) => Effect.Effect<never, never, boolean>
2896
+ <A, E>(exit: Exit.Exit<A, E>) => (self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2897
+ <A, E>(self: Deferred.Deferred<A, E>, exit: Exit.Exit<A, E>) => Effect.Effect<boolean>
2833
2898
  >(2, (self, exit) => deferredCompleteWith(self, exit))
2834
2899
 
2835
2900
  /* @internal */
2836
2901
  export const deferredFail = dual<
2837
- <E>(error: E) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2838
- <E, A>(self: Deferred.Deferred<E, A>, error: E) => Effect.Effect<never, never, boolean>
2902
+ <E>(error: E) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2903
+ <A, E>(self: Deferred.Deferred<A, E>, error: E) => Effect.Effect<boolean>
2839
2904
  >(2, (self, error) => deferredCompleteWith(self, fail(error)))
2840
2905
 
2841
2906
  /* @internal */
2842
2907
  export const deferredFailSync = dual<
2843
- <E>(evaluate: LazyArg<E>) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2844
- <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<E>) => Effect.Effect<never, never, boolean>
2908
+ <E>(evaluate: LazyArg<E>) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2909
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<E>) => Effect.Effect<boolean>
2845
2910
  >(2, (self, evaluate) => deferredCompleteWith(self, failSync(evaluate)))
2846
2911
 
2847
2912
  /* @internal */
2848
2913
  export const deferredFailCause = dual<
2849
- <E>(cause: Cause.Cause<E>) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2850
- <E, A>(self: Deferred.Deferred<E, A>, cause: Cause.Cause<E>) => Effect.Effect<never, never, boolean>
2914
+ <E>(cause: Cause.Cause<E>) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2915
+ <A, E>(self: Deferred.Deferred<A, E>, cause: Cause.Cause<E>) => Effect.Effect<boolean>
2851
2916
  >(2, (self, cause) => deferredCompleteWith(self, failCause(cause)))
2852
2917
 
2853
2918
  /* @internal */
2854
2919
  export const deferredFailCauseSync = dual<
2855
- <E>(evaluate: LazyArg<Cause.Cause<E>>) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2856
- <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<Cause.Cause<E>>) => Effect.Effect<never, never, boolean>
2920
+ <E>(evaluate: LazyArg<Cause.Cause<E>>) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2921
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<Cause.Cause<E>>) => Effect.Effect<boolean>
2857
2922
  >(2, (self, evaluate) => deferredCompleteWith(self, failCauseSync(evaluate)))
2858
2923
 
2859
2924
  /* @internal */
2860
2925
  export const deferredDie = dual<
2861
- (defect: unknown) => <E, A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2862
- <E, A>(self: Deferred.Deferred<E, A>, defect: unknown) => Effect.Effect<never, never, boolean>
2926
+ (defect: unknown) => <A, E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2927
+ <A, E>(self: Deferred.Deferred<A, E>, defect: unknown) => Effect.Effect<boolean>
2863
2928
  >(2, (self, defect) => deferredCompleteWith(self, die(defect)))
2864
2929
 
2865
2930
  /* @internal */
2866
2931
  export const deferredDieSync = dual<
2867
- (evaluate: LazyArg<unknown>) => <E, A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2868
- <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<unknown>) => Effect.Effect<never, never, boolean>
2932
+ (evaluate: LazyArg<unknown>) => <A, E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2933
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<unknown>) => Effect.Effect<boolean>
2869
2934
  >(2, (self, evaluate) => deferredCompleteWith(self, dieSync(evaluate)))
2870
2935
 
2871
2936
  /* @internal */
2872
- export const deferredInterrupt = <E, A>(self: Deferred.Deferred<E, A>): Effect.Effect<never, never, boolean> =>
2937
+ export const deferredInterrupt = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<boolean> =>
2873
2938
  flatMap(fiberId, (fiberId) => deferredCompleteWith(self, interruptWith(fiberId)))
2874
2939
 
2875
2940
  /* @internal */
2876
2941
  export const deferredInterruptWith = dual<
2877
- (fiberId: FiberId.FiberId) => <E, A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2878
- <E, A>(self: Deferred.Deferred<E, A>, fiberId: FiberId.FiberId) => Effect.Effect<never, never, boolean>
2942
+ (fiberId: FiberId.FiberId) => <A, E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2943
+ <A, E>(self: Deferred.Deferred<A, E>, fiberId: FiberId.FiberId) => Effect.Effect<boolean>
2879
2944
  >(2, (self, fiberId) => deferredCompleteWith(self, interruptWith(fiberId)))
2880
2945
 
2881
2946
  /* @internal */
2882
- export const deferredIsDone = <E, A>(self: Deferred.Deferred<E, A>): Effect.Effect<never, never, boolean> =>
2947
+ export const deferredIsDone = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<boolean> =>
2883
2948
  sync(() => MutableRef.get(self.state)._tag === DeferredOpCodes.OP_STATE_DONE)
2884
2949
 
2885
2950
  /* @internal */
2886
- export const deferredPoll = <E, A>(
2887
- self: Deferred.Deferred<E, A>
2888
- ): Effect.Effect<never, never, Option.Option<Effect.Effect<never, E, A>>> =>
2951
+ export const deferredPoll = <A, E>(
2952
+ self: Deferred.Deferred<A, E>
2953
+ ): Effect.Effect<Option.Option<Effect.Effect<A, E>>> =>
2889
2954
  sync(() => {
2890
2955
  const state = MutableRef.get(self.state)
2891
2956
  switch (state._tag) {
@@ -2900,18 +2965,18 @@ export const deferredPoll = <E, A>(
2900
2965
 
2901
2966
  /* @internal */
2902
2967
  export const deferredSucceed = dual<
2903
- <A>(value: A) => <E>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2904
- <E, A>(self: Deferred.Deferred<E, A>, value: A) => Effect.Effect<never, never, boolean>
2968
+ <A>(value: A) => <E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2969
+ <A, E>(self: Deferred.Deferred<A, E>, value: A) => Effect.Effect<boolean>
2905
2970
  >(2, (self, value) => deferredCompleteWith(self, succeed(value)))
2906
2971
 
2907
2972
  /* @internal */
2908
2973
  export const deferredSync = dual<
2909
- <A>(evaluate: LazyArg<A>) => <E>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2910
- <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<A>) => Effect.Effect<never, never, boolean>
2974
+ <A>(evaluate: LazyArg<A>) => <E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2975
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<A>) => Effect.Effect<boolean>
2911
2976
  >(2, (self, evaluate) => deferredCompleteWith(self, sync(evaluate)))
2912
2977
 
2913
2978
  /** @internal */
2914
- export const deferredUnsafeDone = <E, A>(self: Deferred.Deferred<E, A>, effect: Effect.Effect<never, E, A>): void => {
2979
+ export const deferredUnsafeDone = <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>): void => {
2915
2980
  const state = MutableRef.get(self.state)
2916
2981
  if (state._tag === DeferredOpCodes.OP_STATE_PENDING) {
2917
2982
  pipe(self.state, MutableRef.set(deferred.done(effect)))
@@ -2921,10 +2986,10 @@ export const deferredUnsafeDone = <E, A>(self: Deferred.Deferred<E, A>, effect:
2921
2986
  }
2922
2987
  }
2923
2988
 
2924
- const deferredInterruptJoiner = <E, A>(
2925
- self: Deferred.Deferred<E, A>,
2926
- joiner: (effect: Effect.Effect<never, E, A>) => void
2927
- ): Effect.Effect<never, never, void> =>
2989
+ const deferredInterruptJoiner = <A, E>(
2990
+ self: Deferred.Deferred<A, E>,
2991
+ joiner: (effect: Effect.Effect<A, E>) => void
2992
+ ): Effect.Effect<void> =>
2928
2993
  sync(() => {
2929
2994
  const state = MutableRef.get(self.state)
2930
2995
  if (state._tag === DeferredOpCodes.OP_STATE_PENDING) {
@@ -2942,50 +3007,49 @@ const deferredInterruptJoiner = <E, A>(
2942
3007
  const constContext = fiberRefGet(currentContext)
2943
3008
 
2944
3009
  /* @internal */
2945
- export const context = <R>(): Effect.Effect<R, never, Context.Context<R>> =>
2946
- constContext as Effect.Effect<never, never, Context.Context<R>>
3010
+ export const context = <R>(): Effect.Effect<Context.Context<R>, never, R> => constContext as any
2947
3011
 
2948
3012
  /* @internal */
2949
3013
  export const contextWith = <R0, A>(
2950
3014
  f: (context: Context.Context<R0>) => A
2951
- ): Effect.Effect<R0, never, A> => map(context<R0>(), f)
3015
+ ): Effect.Effect<A, never, R0> => map(context<R0>(), f)
2952
3016
 
2953
3017
  /* @internal */
2954
- export const contextWithEffect = <R, R0, E, A>(
2955
- f: (context: Context.Context<R0>) => Effect.Effect<R, E, A>
2956
- ): Effect.Effect<R | R0, E, A> => flatMap(context<R0>(), f)
3018
+ export const contextWithEffect = <R0, A, E, R>(
3019
+ f: (context: Context.Context<R0>) => Effect.Effect<A, E, R>
3020
+ ): Effect.Effect<A, E, R | R0> => flatMap(context<R0>(), f)
2957
3021
 
2958
3022
  /* @internal */
2959
3023
  export const provideContext = dual<
2960
- <R>(context: Context.Context<R>) => <E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<never, E, A>,
2961
- <R, E, A>(self: Effect.Effect<R, E, A>, context: Context.Context<R>) => Effect.Effect<never, E, A>
2962
- >(2, <R, E, A>(self: Effect.Effect<R, E, A>, context: Context.Context<R>) =>
3024
+ <R>(context: Context.Context<R>) => <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E>,
3025
+ <A, E, R>(self: Effect.Effect<A, E, R>, context: Context.Context<R>) => Effect.Effect<A, E>
3026
+ >(2, <A, E, R>(self: Effect.Effect<A, E, R>, context: Context.Context<R>) =>
2963
3027
  fiberRefLocally(
2964
3028
  currentContext,
2965
3029
  context
2966
- )(self as Effect.Effect<never, E, A>))
3030
+ )(self as Effect.Effect<A, E>))
2967
3031
 
2968
3032
  /* @internal */
2969
3033
  export const provideSomeContext = dual<
2970
- <R>(context: Context.Context<R>) => <R1, E, A>(self: Effect.Effect<R1, E, A>) => Effect.Effect<Exclude<R1, R>, E, A>,
2971
- <R, R1, E, A>(self: Effect.Effect<R1, E, A>, context: Context.Context<R>) => Effect.Effect<Exclude<R1, R>, E, A>
2972
- >(2, <R1, R, E, A>(self: Effect.Effect<R1, E, A>, context: Context.Context<R>) =>
3034
+ <R>(context: Context.Context<R>) => <A, E, R1>(self: Effect.Effect<A, E, R1>) => Effect.Effect<A, E, Exclude<R1, R>>,
3035
+ <A, E, R1, R>(self: Effect.Effect<A, E, R1>, context: Context.Context<R>) => Effect.Effect<A, E, Exclude<R1, R>>
3036
+ >(2, <A, E, R1, R>(self: Effect.Effect<A, E, R1>, context: Context.Context<R>) =>
2973
3037
  fiberRefLocallyWith(
2974
3038
  currentContext,
2975
3039
  (parent) => Context.merge(parent, context)
2976
- )(self as Effect.Effect<never, E, A>))
3040
+ )(self as Effect.Effect<A, E>))
2977
3041
 
2978
3042
  /* @internal */
2979
3043
  export const mapInputContext = dual<
2980
3044
  <R0, R>(
2981
3045
  f: (context: Context.Context<R0>) => Context.Context<R>
2982
- ) => <E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R0, E, A>,
2983
- <R0, R, E, A>(
2984
- self: Effect.Effect<R, E, A>,
3046
+ ) => <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R0>,
3047
+ <A, E, R, R0>(
3048
+ self: Effect.Effect<A, E, R>,
2985
3049
  f: (context: Context.Context<R0>) => Context.Context<R>
2986
- ) => Effect.Effect<R0, E, A>
2987
- >(2, <R0, R, E, A>(
2988
- self: Effect.Effect<R, E, A>,
3050
+ ) => Effect.Effect<A, E, R0>
3051
+ >(2, <A, E, R, R0>(
3052
+ self: Effect.Effect<A, E, R>,
2989
3053
  f: (context: Context.Context<R0>) => Context.Context<R>
2990
3054
  ) => contextWithEffect((context: Context.Context<R0>) => provideContext(self, f(context))))
2991
3055
 
@@ -2994,7 +3058,9 @@ export const mapInputContext = dual<
2994
3058
  // -----------------------------------------------------------------------------
2995
3059
 
2996
3060
  /** @internal */
2997
- export const currentSpanFromFiber = <E, A>(fiber: Fiber.RuntimeFiber<E, A>): Option.Option<Tracer.Span> => {
2998
- const span = fiber.getFiberRef(currentContext).unsafeMap.get(internalTracer.spanTag) as Tracer.ParentSpan | undefined
3061
+ export const currentSpanFromFiber = <A, E>(fiber: Fiber.RuntimeFiber<A, E>): Option.Option<Tracer.Span> => {
3062
+ const span = fiber.getFiberRef(currentContext).unsafeMap.get(internalTracer.spanTag.key) as
3063
+ | Tracer.ParentSpan
3064
+ | undefined
2999
3065
  return span !== undefined && span._tag === "Span" ? Option.some(span) : Option.none()
3000
3066
  }