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
@@ -40,21 +40,21 @@ import * as internalTracer from "./tracer.js"
40
40
  /* @internal */
41
41
  export const annotateLogs = dual<
42
42
  {
43
- (key: string, value: unknown): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
43
+ (key: string, value: unknown): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
44
44
  (
45
45
  values: Record<string, unknown>
46
- ): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
46
+ ): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
47
47
  },
48
48
  {
49
- <R, E, A>(effect: Effect.Effect<R, E, A>, key: string, value: unknown): Effect.Effect<R, E, A>
50
- <R, E, A>(effect: Effect.Effect<R, E, A>, values: Record<string, unknown>): Effect.Effect<R, E, A>
49
+ <A, E, R>(effect: Effect.Effect<A, E, R>, key: string, value: unknown): Effect.Effect<A, E, R>
50
+ <A, E, R>(effect: Effect.Effect<A, E, R>, values: Record<string, unknown>): Effect.Effect<A, E, R>
51
51
  }
52
52
  >(
53
53
  (args) => core.isEffect(args[0]),
54
- function<R, E, A>() {
54
+ function<A, E, R>() {
55
55
  const args = arguments
56
56
  return core.fiberRefLocallyWith(
57
- args[0] as Effect.Effect<R, E, A>,
57
+ args[0] as Effect.Effect<A, E, R>,
58
58
  core.currentLogAnnotations,
59
59
  typeof args[1] === "string"
60
60
  ? HashMap.set(args[1], args[2])
@@ -68,19 +68,19 @@ export const annotateLogs = dual<
68
68
  )
69
69
 
70
70
  /* @internal */
71
- export const asSome = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, Option.Option<A>> =>
71
+ export const asSome = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Option.Option<A>, E, R> =>
72
72
  core.map(self, Option.some)
73
73
 
74
74
  /* @internal */
75
- export const asSomeError = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, Option.Option<E>, A> =>
75
+ export const asSomeError = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, Option.Option<E>, R> =>
76
76
  core.mapError(self, Option.some)
77
77
 
78
78
  /* @internal */
79
- export const asyncOption = <R, E, A>(
80
- register: (callback: (_: Effect.Effect<R, E, A>) => void) => Option.Option<Effect.Effect<R, E, A>>,
79
+ export const asyncOption = <A, E = never, R = never>(
80
+ register: (callback: (_: Effect.Effect<A, E, R>) => void) => Option.Option<Effect.Effect<A, E, R>>,
81
81
  blockingOn: FiberId.FiberId = FiberId.none
82
- ): Effect.Effect<R, E, A> =>
83
- core.asyncEither<R, E, A>(
82
+ ): Effect.Effect<A, E, R> =>
83
+ core.asyncEither(
84
84
  (cb) => {
85
85
  const option = register(cb)
86
86
  switch (option._tag) {
@@ -100,8 +100,8 @@ export const try_: {
100
100
  <A, E>(options: {
101
101
  readonly try: LazyArg<A>
102
102
  readonly catch: (error: unknown) => E
103
- }): Effect.Effect<never, E, A>
104
- <A>(evaluate: LazyArg<A>): Effect.Effect<never, Cause.UnknownException, A>
103
+ }): Effect.Effect<A, E>
104
+ <A>(evaluate: LazyArg<A>): Effect.Effect<A, Cause.UnknownException>
105
105
  } = <A, E>(
106
106
  arg: LazyArg<A> | {
107
107
  readonly try: LazyArg<A>
@@ -128,47 +128,46 @@ export const try_: {
128
128
  }
129
129
 
130
130
  /* @internal */
131
- export const _catch = dual<
132
- <N extends keyof E, K extends E[N] & string, E, R1, E1, A1>(
131
+ export const _catch: {
132
+ <N extends keyof E, K extends E[N] & string, E, A1, E1, R1>(
133
133
  discriminator: N,
134
134
  options: {
135
135
  readonly failure: K
136
- readonly onFailure: (error: Extract<E, { [n in N]: K }>) => Effect.Effect<R1, E1, A1>
136
+ readonly onFailure: (error: Extract<E, { [n in N]: K }>) => Effect.Effect<A1, E1, R1>
137
137
  }
138
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<
139
- R | R1,
138
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<
139
+ A | A1,
140
140
  Exclude<E, { [n in N]: K }> | E1,
141
- A | A1
142
- >,
143
- <R, E, A, N extends keyof E, K extends E[N] & string, R1, E1, A1>(
144
- self: Effect.Effect<R, E, A>,
141
+ R | R1
142
+ >
143
+ <A, E, R, N extends keyof E, K extends E[N] & string, A1, E1, R1>(
144
+ self: Effect.Effect<A, E, R>,
145
145
  discriminator: N,
146
146
  options: {
147
147
  readonly failure: K
148
- readonly onFailure: (error: Extract<E, { [n in N]: K }>) => Effect.Effect<R1, E1, A1>
148
+ readonly onFailure: (error: Extract<E, { [n in N]: K }>) => Effect.Effect<A1, E1, R1>
149
149
  }
150
- ) => Effect.Effect<R | R1, Exclude<E, { [n in N]: K }> | E1, A | A1>
151
- >(
152
- // @ts-expect-error
150
+ ): Effect.Effect<A | A1, Exclude<E, { [n in N]: K }> | E1, R | R1>
151
+ } = dual(
153
152
  3,
154
153
  (self, tag, options) =>
155
154
  core.catchAll(self, (e) => {
156
155
  if (Predicate.hasProperty(e, tag) && e[tag] === options.failure) {
157
- return options.onFailure(e as any)
156
+ return options.onFailure(e)
158
157
  }
159
- return core.fail(e as any)
158
+ return core.fail(e)
160
159
  })
161
160
  )
162
161
 
163
162
  /* @internal */
164
163
  export const catchAllDefect = dual<
165
- <R2, E2, A2>(
166
- f: (defect: unknown) => Effect.Effect<R2, E2, A2>
167
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | A2>,
168
- <R, E, A, R2, E2, A2>(
169
- self: Effect.Effect<R, E, A>,
170
- f: (defect: unknown) => Effect.Effect<R2, E2, A2>
171
- ) => Effect.Effect<R | R2, E | E2, A | A2>
164
+ <A2, E2, R2>(
165
+ f: (defect: unknown) => Effect.Effect<A2, E2, R2>
166
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, E | E2, R | R2>,
167
+ <A, E, R, A2, E2, R2>(
168
+ self: Effect.Effect<A, E, R>,
169
+ f: (defect: unknown) => Effect.Effect<A2, E2, R2>
170
+ ) => Effect.Effect<A | A2, E | E2, R | R2>
172
171
  >(2, (self, f) =>
173
172
  core.catchAllCause(
174
173
  self,
@@ -186,22 +185,22 @@ export const catchAllDefect = dual<
186
185
  ))
187
186
 
188
187
  /* @internal */
189
- export const catchSomeCause = dual<
190
- <E, R2, E2, A2>(
191
- f: (cause: Cause.Cause<E>) => Option.Option<Effect.Effect<R2, E2, A2>>
192
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | A2>,
193
- <R, E, A, R2, E2, A2>(
194
- self: Effect.Effect<R, E, A>,
195
- f: (cause: Cause.Cause<E>) => Option.Option<Effect.Effect<R2, E2, A2>>
196
- ) => Effect.Effect<R | R2, E | E2, A | A2>
197
- >(
188
+ export const catchSomeCause: {
189
+ <E, A2, E2, R2>(
190
+ f: (cause: Cause.Cause<NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
191
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E | E2, R2 | R>
192
+ <A, E, R, A2, E2, R2>(
193
+ self: Effect.Effect<A, E, R>,
194
+ f: (cause: Cause.Cause<NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
195
+ ): Effect.Effect<A2 | A, E | E2, R2 | R>
196
+ } = dual(
198
197
  2,
199
- <R, E, A, R2, E2, A2>(
200
- self: Effect.Effect<R, E, A>,
201
- f: (cause: Cause.Cause<E>) => Option.Option<Effect.Effect<R2, E2, A2>>
202
- ) =>
198
+ <A, E, R, A2, E2, R2>(
199
+ self: Effect.Effect<A, E, R>,
200
+ f: (cause: Cause.Cause<NoInfer<E>>) => Option.Option<Effect.Effect<A2, E2, R2>>
201
+ ): Effect.Effect<A2 | A, E | E2, R2 | R> =>
203
202
  core.matchCauseEffect(self, {
204
- onFailure: (cause): Effect.Effect<R2, E | E2, A2> => {
203
+ onFailure: (cause): Effect.Effect<A2, E | E2, R2> => {
205
204
  const option = f(cause)
206
205
  switch (option._tag) {
207
206
  case "None": {
@@ -218,16 +217,16 @@ export const catchSomeCause = dual<
218
217
 
219
218
  /* @internal */
220
219
  export const catchSomeDefect = dual<
221
- <R2, E2, A2>(
222
- pf: (defect: unknown) => Option.Option<Effect.Effect<R2, E2, A2>>
223
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | A2>,
224
- <R, E, A, R2, E2, A2>(
225
- self: Effect.Effect<R, E, A>,
226
- pf: (defect: unknown) => Option.Option<Effect.Effect<R2, E2, A2>>
227
- ) => Effect.Effect<R | R2, E | E2, A | A2>
220
+ <A2, E2, R2>(
221
+ pf: (defect: unknown) => Option.Option<Effect.Effect<A2, E2, R2>>
222
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, E | E2, R | R2>,
223
+ <A, E, R, A2, E2, R2>(
224
+ self: Effect.Effect<A, E, R>,
225
+ pf: (defect: unknown) => Option.Option<Effect.Effect<A2, E2, R2>>
226
+ ) => Effect.Effect<A | A2, E | E2, R | R2>
228
227
  >(
229
228
  2,
230
- <R, E, A, R2, E2, A2>(self: Effect.Effect<R, E, A>, pf: (_: unknown) => Option.Option<Effect.Effect<R2, E2, A2>>) =>
229
+ (self, pf) =>
231
230
  core.catchAllCause(
232
231
  self,
233
232
  core.unified((cause) => {
@@ -247,20 +246,20 @@ export const catchSomeDefect = dual<
247
246
 
248
247
  /* @internal */
249
248
  export const catchTag = dual<
250
- <K extends (E extends { _tag: string } ? E["_tag"] : never), E, R1, E1, A1>(
249
+ <K extends (E extends { _tag: string } ? E["_tag"] : never), E, A1, E1, R1>(
251
250
  k: K,
252
- f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
253
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, Exclude<E, { _tag: K }> | E1, A | A1>,
254
- <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
255
- self: Effect.Effect<R, E, A>,
251
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
252
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A1, Exclude<E, { _tag: K }> | E1, R | R1>,
253
+ <A, E, R, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
254
+ self: Effect.Effect<A, E, R>,
256
255
  k: K,
257
- f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
258
- ) => Effect.Effect<R | R1, Exclude<E, { _tag: K }> | E1, A | A1>
259
- >(3, <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
260
- self: Effect.Effect<R, E, A>,
256
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
257
+ ) => Effect.Effect<A | A1, Exclude<E, { _tag: K }> | E1, R | R1>
258
+ >(3, <A, E, R, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
259
+ self: Effect.Effect<A, E, R>,
261
260
  k: K,
262
- f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
263
- ): Effect.Effect<R | R1, Exclude<E, { _tag: K }> | E1, A | A1> =>
261
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
262
+ ): Effect.Effect<A | A1, Exclude<E, { _tag: K }> | E1, R | R1> =>
264
263
  core.catchIf(self, Predicate.isTagged(k) as Predicate.Refinement<E, Extract<E, { _tag: K }>>, f) as any)
265
264
 
266
265
  /** @internal */
@@ -273,18 +272,18 @@ export const catchTags: {
273
272
  {})
274
273
  >(
275
274
  cases: Cases
276
- ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<
277
- | R
275
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<
276
+ | A
278
277
  | {
279
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<infer R, any, any>) ? R : never
278
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<infer A, any, any>) ? A : never
280
279
  }[keyof Cases],
281
280
  | Exclude<E, { _tag: keyof Cases }>
282
281
  | {
283
282
  [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
284
283
  }[keyof Cases],
285
- | A
284
+ | R
286
285
  | {
287
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer A>) ? A : never
286
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer R>) ? R : never
288
287
  }[keyof Cases]
289
288
  >
290
289
  <
@@ -296,20 +295,20 @@ export const catchTags: {
296
295
  } :
297
296
  {})
298
297
  >(
299
- self: Effect.Effect<R, E, A>,
298
+ self: Effect.Effect<A, E, R>,
300
299
  cases: Cases
301
300
  ): Effect.Effect<
302
- | R
301
+ | A
303
302
  | {
304
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<infer R, any, any>) ? R : never
303
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<infer A, any, any>) ? A : never
305
304
  }[keyof Cases],
306
305
  | Exclude<E, { _tag: keyof Cases }>
307
306
  | {
308
307
  [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
309
308
  }[keyof Cases],
310
- | A
309
+ | R
311
310
  | {
312
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer A>) ? A : never
311
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer R>) ? R : never
313
312
  }[keyof Cases]
314
313
  >
315
314
  } = dual(2, (self, cases) => {
@@ -325,36 +324,36 @@ export const catchTags: {
325
324
  })
326
325
 
327
326
  /* @internal */
328
- export const cause = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Cause.Cause<E>> =>
327
+ export const cause = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Cause.Cause<E>, never, R> =>
329
328
  core.matchCause(self, { onFailure: identity, onSuccess: () => internalCause.empty })
330
329
 
331
330
  /* @internal */
332
- export const clockWith: <R, E, A>(f: (clock: Clock.Clock) => Effect.Effect<R, E, A>) => Effect.Effect<R, E, A> =
331
+ export const clockWith: <A, E, R>(f: (clock: Clock.Clock) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, R> =
333
332
  Clock.clockWith
334
333
 
335
334
  /* @internal */
336
- export const clock: Effect.Effect<never, never, Clock.Clock> = clockWith(core.succeed)
335
+ export const clock: Effect.Effect<Clock.Clock> = clockWith(core.succeed)
337
336
 
338
337
  /* @internal */
339
338
  export const delay = dual<
340
- (duration: Duration.DurationInput) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
341
- <R, E, A>(self: Effect.Effect<R, E, A>, duration: Duration.DurationInput) => Effect.Effect<R, E, A>
339
+ (duration: Duration.DurationInput) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
340
+ <A, E, R>(self: Effect.Effect<A, E, R>, duration: Duration.DurationInput) => Effect.Effect<A, E, R>
342
341
  >(2, (self, duration) => core.zipRight(Clock.sleep(duration), self))
343
342
 
344
343
  /* @internal */
345
- export const descriptorWith = <R, E, A>(
346
- f: (descriptor: Fiber.Fiber.Descriptor) => Effect.Effect<R, E, A>
347
- ): Effect.Effect<R, E, A> =>
344
+ export const descriptorWith = <A, E, R>(
345
+ f: (descriptor: Fiber.Fiber.Descriptor) => Effect.Effect<A, E, R>
346
+ ): Effect.Effect<A, E, R> =>
348
347
  core.withFiberRuntime((state, status) =>
349
348
  f({
350
349
  id: state.id(),
351
350
  status,
352
351
  interruptors: internalCause.interruptors(state.getFiberRef(core.currentInterruptedCause))
353
352
  })
354
- ) as Effect.Effect<R, E, A>
353
+ ) as Effect.Effect<A, E, R>
355
354
 
356
355
  /* @internal */
357
- export const allowInterrupt: Effect.Effect<never, never, void> = descriptorWith(
356
+ export const allowInterrupt: Effect.Effect<void> = descriptorWith(
358
357
  (descriptor) =>
359
358
  HashSet.size(descriptor.interruptors) > 0
360
359
  ? core.interrupt
@@ -362,17 +361,17 @@ export const allowInterrupt: Effect.Effect<never, never, void> = descriptorWith(
362
361
  )
363
362
 
364
363
  /* @internal */
365
- export const descriptor: Effect.Effect<never, never, Fiber.Fiber.Descriptor> = descriptorWith(core.succeed)
364
+ export const descriptor: Effect.Effect<Fiber.Fiber.Descriptor> = descriptorWith(core.succeed)
366
365
 
367
366
  /* @internal */
368
- export const diffFiberRefs = <R, E, A>(
369
- self: Effect.Effect<R, E, A>
370
- ): Effect.Effect<R, E, [FiberRefsPatch.FiberRefsPatch, A]> => summarized(self, fiberRefs, fiberRefsPatch.diff)
367
+ export const diffFiberRefs = <A, E, R>(
368
+ self: Effect.Effect<A, E, R>
369
+ ): Effect.Effect<[FiberRefsPatch.FiberRefsPatch, A], E, R> => summarized(self, fiberRefs, fiberRefsPatch.diff)
371
370
 
372
371
  /* @internal */
373
- export const diffFiberRefsAndRuntimeFlags = <R, E, A>(
374
- self: Effect.Effect<R, E, A>
375
- ): Effect.Effect<R, E, [[FiberRefsPatch.FiberRefsPatch, runtimeFlagsPatch.RuntimeFlagsPatch], A]> =>
372
+ export const diffFiberRefsAndRuntimeFlags = <A, E, R>(
373
+ self: Effect.Effect<A, E, R>
374
+ ): Effect.Effect<[[FiberRefsPatch.FiberRefsPatch, runtimeFlagsPatch.RuntimeFlagsPatch], A], E, R> =>
376
375
  summarized(
377
376
  self,
378
377
  core.zip(fiberRefs, core.runtimeFlags),
@@ -380,32 +379,24 @@ export const diffFiberRefsAndRuntimeFlags = <R, E, A>(
380
379
  )
381
380
 
382
381
  /* @internal */
383
- export const Do: Effect.Effect<never, never, {}> = core.succeed({})
382
+ export const Do: Effect.Effect<{}> = core.succeed({})
384
383
 
385
384
  /* @internal */
386
- export const bind = dual<
387
- <N extends string, K, R2, E2, A>(
385
+ export const bind: {
386
+ <N extends string, K, A, E2, R2>(
388
387
  tag: Exclude<N, keyof K>,
389
- f: (_: K) => Effect.Effect<R2, E2, A>
390
- ) => <R, E>(self: Effect.Effect<R, E, K>) => Effect.Effect<
391
- R | R2,
392
- E | E2,
393
- Effect.MergeRecord<K, { [k in N]: A }>
394
- >,
395
- <R, E, N extends string, K, R2, E2, A>(
396
- self: Effect.Effect<R, E, K>,
388
+ f: (_: K) => Effect.Effect<A, E2, R2>
389
+ ): <E, R>(self: Effect.Effect<K, E, R>) => Effect.Effect<Effect.MergeRecord<K, { [k in N]: A }>, E2 | E, R2 | R>
390
+ <K, E, R, N extends string, A, E2, R2>(
391
+ self: Effect.Effect<K, E, R>,
397
392
  tag: Exclude<N, keyof K>,
398
- f: (_: K) => Effect.Effect<R2, E2, A>
399
- ) => Effect.Effect<
400
- R | R2,
401
- E | E2,
402
- Effect.MergeRecord<K, { [k in N]: A }>
403
- >
404
- >(3, <R, E, N extends string, K, R2, E2, A>(
405
- self: Effect.Effect<R, E, K>,
393
+ f: (_: K) => Effect.Effect<A, E2, R2>
394
+ ): Effect.Effect<Effect.MergeRecord<K, { [k in N]: A }>, E2 | E, R2 | R>
395
+ } = dual(3, <K, E, R, N extends string, A, E2, R2>(
396
+ self: Effect.Effect<K, E, R>,
406
397
  tag: Exclude<N, keyof K>,
407
- f: (_: K) => Effect.Effect<R2, E2, A>
408
- ) =>
398
+ f: (_: K) => Effect.Effect<A, E2, R2>
399
+ ): Effect.Effect<Effect.MergeRecord<K, { [k in N]: A }>, E2 | E, R2 | R> =>
409
400
  core.flatMap(self, (k) =>
410
401
  core.map(
411
402
  f(k),
@@ -413,46 +404,31 @@ export const bind = dual<
413
404
  )))
414
405
 
415
406
  /* @internal */
416
- export const bindTo = dual<
417
- <N extends string>(tag: N) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<
418
- R,
419
- E,
420
- Record<N, A>
421
- >,
422
- <R, E, A, N extends string>(
423
- self: Effect.Effect<R, E, A>,
424
- tag: N
425
- ) => Effect.Effect<
426
- R,
427
- E,
428
- Record<N, A>
429
- >
430
- >(
407
+ export const bindTo: {
408
+ <N extends string>(tag: N): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Record<N, A>, E, R>
409
+ <A, E, R, N extends string>(self: Effect.Effect<A, E, R>, tag: N): Effect.Effect<Record<N, A>, E, R>
410
+ } = dual(
431
411
  2,
432
- <R, E, A, N extends string>(self: Effect.Effect<R, E, A>, tag: N): Effect.Effect<R, E, Record<N, A>> =>
412
+ <A, E, R, N extends string>(self: Effect.Effect<A, E, R>, tag: N): Effect.Effect<Record<N, A>, E, R> =>
433
413
  core.map(self, (a) => ({ [tag]: a } as Record<N, A>))
434
414
  )
435
415
 
436
416
  /* @internal */
437
- export const bindValue = dual<
417
+ export const let_: {
438
418
  <N extends string, K, A>(
439
419
  tag: Exclude<N, keyof K>,
440
420
  f: (_: K) => A
441
- ) => <R, E>(self: Effect.Effect<R, E, K>) => Effect.Effect<
442
- R,
443
- E,
444
- Effect.MergeRecord<K, { [k in N]: A }>
445
- >,
446
- <R, E, K, N extends string, A>(
447
- self: Effect.Effect<R, E, K>,
421
+ ): <E, R>(self: Effect.Effect<K, E, R>) => Effect.Effect<Effect.MergeRecord<K, { [k in N]: A }>, E, R>
422
+ <K, E, R, N extends string, A>(
423
+ self: Effect.Effect<K, E, R>,
448
424
  tag: Exclude<N, keyof K>,
449
425
  f: (_: K) => A
450
- ) => Effect.Effect<
451
- R,
452
- E,
453
- Effect.MergeRecord<K, { [k in N]: A }>
454
- >
455
- >(3, <R, E, K, N extends string, A>(self: Effect.Effect<R, E, K>, tag: Exclude<N, keyof K>, f: (_: K) => A) =>
426
+ ): Effect.Effect<Effect.MergeRecord<K, { [k in N]: A }>, E, R>
427
+ } = dual(3, <K, E, R, N extends string, A>(
428
+ self: Effect.Effect<K, E, R>,
429
+ tag: Exclude<N, keyof K>,
430
+ f: (_: K) => A
431
+ ): Effect.Effect<Effect.MergeRecord<K, { [k in N]: A }>, E, R> =>
456
432
  core.map(
457
433
  self,
458
434
  (k): Effect.MergeRecord<K, { [k in N]: A }> => ({ ...k, [tag]: f(k) } as any)
@@ -460,24 +436,24 @@ export const bindValue = dual<
460
436
 
461
437
  /* @internal */
462
438
  export const dropUntil: {
463
- <A, R, E>(
464
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
465
- ): (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>
466
- <A, R, E>(
439
+ <A, E, R>(
440
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
441
+ ): (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>
442
+ <A, E, R>(
467
443
  elements: Iterable<A>,
468
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
469
- ): Effect.Effect<R, E, Array<A>>
444
+ predicate: (a: A, i: number) => Effect.Effect<boolean, E, R>
445
+ ): Effect.Effect<Array<A>, E, R>
470
446
  } = dual(
471
447
  2,
472
- <A, R, E>(
448
+ <A, E, R>(
473
449
  elements: Iterable<A>,
474
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
475
- ): Effect.Effect<R, E, Array<A>> =>
450
+ predicate: (a: A, i: number) => Effect.Effect<boolean, E, R>
451
+ ): Effect.Effect<Array<A>, E, R> =>
476
452
  core.suspend(() => {
477
453
  const iterator = elements[Symbol.iterator]()
478
454
  const builder: Array<A> = []
479
455
  let next: IteratorResult<A, any>
480
- let dropping: Effect.Effect<R, E, boolean> = core.succeed(false)
456
+ let dropping: Effect.Effect<boolean, E, R> = core.succeed(false)
481
457
  let i = 0
482
458
  while ((next = iterator.next()) && !next.done) {
483
459
  const a = next.value
@@ -496,24 +472,24 @@ export const dropUntil: {
496
472
 
497
473
  /* @internal */
498
474
  export const dropWhile: {
499
- <A, R, E>(
500
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
501
- ): (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>
502
- <A, R, E>(
475
+ <A, E, R>(
476
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
477
+ ): (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>
478
+ <A, E, R>(
503
479
  elements: Iterable<A>,
504
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
505
- ): Effect.Effect<R, E, Array<A>>
480
+ predicate: (a: A, i: number) => Effect.Effect<boolean, E, R>
481
+ ): Effect.Effect<Array<A>, E, R>
506
482
  } = dual(
507
483
  2,
508
- <A, R, E>(
484
+ <A, E, R>(
509
485
  elements: Iterable<A>,
510
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
511
- ): Effect.Effect<R, E, Array<A>> =>
486
+ predicate: (a: A, i: number) => Effect.Effect<boolean, E, R>
487
+ ): Effect.Effect<Array<A>, E, R> =>
512
488
  core.suspend(() => {
513
489
  const iterator = elements[Symbol.iterator]()
514
490
  const builder: Array<A> = []
515
491
  let next
516
- let dropping: Effect.Effect<R, E, boolean> = core.succeed(true)
492
+ let dropping: Effect.Effect<boolean, E, R> = core.succeed(true)
517
493
  let i = 0
518
494
  while ((next = iterator.next()) && !next.done) {
519
495
  const a = next.value
@@ -531,22 +507,22 @@ export const dropWhile: {
531
507
  )
532
508
 
533
509
  /* @internal */
534
- export const contextWith = <R, A>(f: (context: Context.Context<R>) => A): Effect.Effect<R, never, A> =>
510
+ export const contextWith = <R, A>(f: (context: Context.Context<R>) => A): Effect.Effect<A, never, R> =>
535
511
  core.map(core.context<R>(), f)
536
512
 
537
513
  /* @internal */
538
- export const eventually = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, A> =>
514
+ export const eventually = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, never, R> =>
539
515
  core.orElse(self, () => core.flatMap(core.yieldNow(), () => eventually(self)))
540
516
 
541
517
  /* @internal */
542
518
  export const filterMap = dual<
543
519
  <A, B>(
544
520
  pf: (a: A) => Option.Option<B>
545
- ) => <R, E>(elements: Iterable<Effect.Effect<R, E, A>>) => Effect.Effect<R, E, Array<B>>,
546
- <R, E, A, B>(
547
- elements: Iterable<Effect.Effect<R, E, A>>,
521
+ ) => <E, R>(elements: Iterable<Effect.Effect<A, E, R>>) => Effect.Effect<Array<B>, E, R>,
522
+ <A, E, R, B>(
523
+ elements: Iterable<Effect.Effect<A, E, R>>,
548
524
  pf: (a: A) => Option.Option<B>
549
- ) => Effect.Effect<R, E, Array<B>>
525
+ ) => Effect.Effect<Array<B>, E, R>
550
526
  >(2, (elements, pf) =>
551
527
  core.map(
552
528
  core.forEachSequential(elements, identity),
@@ -557,29 +533,29 @@ export const filterMap = dual<
557
533
  export const filterOrDie: {
558
534
  <A, B extends A>(
559
535
  refinement: Predicate.Refinement<NoInfer<A>, B>,
560
- orDieWith: (a: A) => unknown
561
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
536
+ orDieWith: (a: NoInfer<A>) => unknown
537
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
562
538
  <A>(
563
539
  predicate: Predicate.Predicate<NoInfer<A>>,
564
- orDieWith: (a: A) => unknown
565
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
566
- <R, E, A, B extends A>(
567
- self: Effect.Effect<R, E, A>,
540
+ orDieWith: (a: NoInfer<A>) => unknown
541
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
542
+ <A, E, R, B extends A>(
543
+ self: Effect.Effect<A, E, R>,
568
544
  refinement: Predicate.Refinement<A, B>,
569
545
  orDieWith: (a: A) => unknown
570
- ): Effect.Effect<R, E, B>
571
- <R, E, A>(
572
- self: Effect.Effect<R, E, A>,
573
- filter: Predicate.Predicate<A>,
546
+ ): Effect.Effect<B, E, R>
547
+ <A, E, R>(
548
+ self: Effect.Effect<A, E, R>,
549
+ predicate: Predicate.Predicate<A>,
574
550
  orDieWith: (a: A) => unknown
575
- ): Effect.Effect<R, E, A>
551
+ ): Effect.Effect<A, E, R>
576
552
  } = dual(
577
553
  3,
578
- <R, E, A>(
579
- self: Effect.Effect<R, E, A>,
554
+ <A, E, R>(
555
+ self: Effect.Effect<A, E, R>,
580
556
  predicate: Predicate.Predicate<A>,
581
557
  orDieWith: (a: A) => unknown
582
- ): Effect.Effect<R, E, A> => filterOrElse(self, predicate, (a) => core.dieSync(() => orDieWith(a)))
558
+ ): Effect.Effect<A, E, R> => filterOrElse(self, predicate, (a) => core.dieSync(() => orDieWith(a)))
583
559
  )
584
560
 
585
561
  /* @internal */
@@ -587,48 +563,48 @@ export const filterOrDieMessage: {
587
563
  <A, B extends A>(
588
564
  refinement: Predicate.Refinement<NoInfer<A>, B>,
589
565
  message: string
590
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
566
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
591
567
  <A>(
592
568
  predicate: Predicate.Predicate<NoInfer<A>>,
593
569
  message: string
594
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
595
- <R, E, A, B extends A>(
596
- self: Effect.Effect<R, E, A>,
570
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
571
+ <A, E, R, B extends A>(
572
+ self: Effect.Effect<A, E, R>,
597
573
  refinement: Predicate.Refinement<A, B>,
598
574
  message: string
599
- ): Effect.Effect<R, E, B>
600
- <R, E, A>(self: Effect.Effect<R, E, A>, predicate: Predicate.Predicate<A>, message: string): Effect.Effect<R, E, A>
575
+ ): Effect.Effect<B, E, R>
576
+ <A, E, R>(self: Effect.Effect<A, E, R>, predicate: Predicate.Predicate<A>, message: string): Effect.Effect<A, E, R>
601
577
  } = dual(
602
578
  3,
603
- <R, E, A>(self: Effect.Effect<R, E, A>, predicate: Predicate.Predicate<A>, message: string): Effect.Effect<R, E, A> =>
579
+ <A, E, R>(self: Effect.Effect<A, E, R>, predicate: Predicate.Predicate<A>, message: string): Effect.Effect<A, E, R> =>
604
580
  filterOrElse(self, predicate, () => core.dieMessage(message))
605
581
  )
606
582
 
607
583
  /* @internal */
608
584
  export const filterOrElse: {
609
- <A, B extends A, R2, E2, C>(
585
+ <A, B extends A, C, E2, R2>(
610
586
  refinement: Predicate.Refinement<NoInfer<A>, B>,
611
- orElse: (a: NoInfer<A>) => Effect.Effect<R2, E2, C>
612
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2 | E, B | C>
613
- <A, R2, E2, B>(
587
+ orElse: (a: NoInfer<A>) => Effect.Effect<C, E2, R2>
588
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B | C, E2 | E, R2 | R>
589
+ <A, B, E2, R2>(
614
590
  predicate: Predicate.Predicate<NoInfer<A>>,
615
- orElse: (a: NoInfer<A>) => Effect.Effect<R2, E2, B>
616
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2 | E, A | B>
617
- <R, E, A, B extends A, R2, E2, C>(
618
- self: Effect.Effect<R, E, A>,
591
+ orElse: (a: NoInfer<A>) => Effect.Effect<B, E2, R2>
592
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | B, E2 | E, R2 | R>
593
+ <A, E, R, B extends A, C, E2, R2>(
594
+ self: Effect.Effect<A, E, R>,
619
595
  refinement: Predicate.Refinement<A, B>,
620
- orElse: (a: A) => Effect.Effect<R2, E2, C>
621
- ): Effect.Effect<R | R2, E | E2, B | C>
622
- <R, E, A, R2, E2, B>(
623
- self: Effect.Effect<R, E, A>,
596
+ orElse: (a: A) => Effect.Effect<C, E2, R2>
597
+ ): Effect.Effect<B | C, E | E2, R | R2>
598
+ <A, E, R, B, E2, R2>(
599
+ self: Effect.Effect<A, E, R>,
624
600
  predicate: Predicate.Predicate<A>,
625
- orElse: (a: A) => Effect.Effect<R2, E2, B>
626
- ): Effect.Effect<R | R2, E | E2, A | B>
627
- } = dual(3, <R, E, A, R2, E2, B>(
628
- self: Effect.Effect<R, E, A>,
601
+ orElse: (a: A) => Effect.Effect<B, E2, R2>
602
+ ): Effect.Effect<A | B, E | E2, R | R2>
603
+ } = dual(3, <A, E, R, B, E2, R2>(
604
+ self: Effect.Effect<A, E, R>,
629
605
  predicate: Predicate.Predicate<A>,
630
- orElse: (a: A) => Effect.Effect<R2, E2, B>
631
- ): Effect.Effect<R | R2, E | E2, A | B> =>
606
+ orElse: (a: A) => Effect.Effect<B, E2, R2>
607
+ ): Effect.Effect<A | B, E | E2, R | R2> =>
632
608
  core.flatMap(
633
609
  self,
634
610
  (a) => predicate(a) ? core.succeed<A | B>(a) : orElse(a)
@@ -639,52 +615,58 @@ export const filterOrFail: {
639
615
  <A, B extends A, E2>(
640
616
  refinement: Predicate.Refinement<NoInfer<A>, B>,
641
617
  orFailWith: (a: NoInfer<A>) => E2
642
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2 | E, B>
618
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E2 | E, R>
643
619
  <A, E2>(
644
620
  predicate: Predicate.Predicate<NoInfer<A>>,
645
621
  orFailWith: (a: NoInfer<A>) => E2
646
- ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2 | E, A>
647
- <R, E, A, B extends A, E2>(
648
- self: Effect.Effect<R, E, A>,
622
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2 | E, R>
623
+ <A, E, R, B extends A, E2>(
624
+ self: Effect.Effect<A, E, R>,
649
625
  refinement: Predicate.Refinement<A, B>,
650
626
  orFailWith: (a: A) => E2
651
- ): Effect.Effect<R, E | E2, B>
652
- <R, E, A, E2>(
653
- self: Effect.Effect<R, E, A>,
627
+ ): Effect.Effect<B, E | E2, R>
628
+ <A, E, R, E2>(
629
+ self: Effect.Effect<A, E, R>,
654
630
  predicate: Predicate.Predicate<A>,
655
631
  orFailWith: (a: A) => E2
656
- ): Effect.Effect<R, E | E2, A>
657
- } = dual(3, <R, E, A, E2>(
658
- self: Effect.Effect<R, E, A>,
632
+ ): Effect.Effect<A, E | E2, R>
633
+ } = dual(3, <A, E, R, E2>(
634
+ self: Effect.Effect<A, E, R>,
659
635
  predicate: Predicate.Predicate<A>,
660
636
  orFailWith: (a: A) => E2
661
- ): Effect.Effect<R, E | E2, A> => filterOrElse(self, predicate, (a) => core.failSync(() => orFailWith(a))))
637
+ ): Effect.Effect<A, E | E2, R> => filterOrElse(self, predicate, (a) => core.failSync(() => orFailWith(a))))
662
638
 
663
639
  /* @internal */
664
- export const findFirst = dual<
665
- <A, R, E>(
666
- f: (a: A, i: number) => Effect.Effect<R, E, boolean>
667
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Option.Option<A>>,
668
- <A, R, E>(
640
+ export const findFirst: {
641
+ <A, E, R>(
642
+ f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
643
+ ): (elements: Iterable<A>) => Effect.Effect<Option.Option<A>, E, R>
644
+ <A, E, R>(
669
645
  elements: Iterable<A>,
670
- f: (a: A, i: number) => Effect.Effect<R, E, boolean>
671
- ) => Effect.Effect<R, E, Option.Option<A>>
672
- >(2, (elements, f) =>
673
- core.suspend(() => {
674
- const iterator = elements[Symbol.iterator]()
675
- const next = iterator.next()
676
- if (!next.done) {
677
- return findLoop(iterator, 0, f, next.value)
678
- }
679
- return core.succeed(Option.none())
680
- }))
646
+ f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
647
+ ): Effect.Effect<Option.Option<A>, E, R>
648
+ } = dual(
649
+ 2,
650
+ <A, E, R>(
651
+ elements: Iterable<A>,
652
+ f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
653
+ ): Effect.Effect<Option.Option<A>, E, R> =>
654
+ core.suspend(() => {
655
+ const iterator = elements[Symbol.iterator]()
656
+ const next = iterator.next()
657
+ if (!next.done) {
658
+ return findLoop(iterator, 0, f, next.value)
659
+ }
660
+ return core.succeed(Option.none())
661
+ })
662
+ )
681
663
 
682
- const findLoop = <A, R, E>(
664
+ const findLoop = <A, E, R>(
683
665
  iterator: Iterator<A>,
684
666
  index: number,
685
- f: (a: A, i: number) => Effect.Effect<R, E, boolean>,
667
+ f: (a: A, i: number) => Effect.Effect<boolean, E, R>,
686
668
  value: A
687
- ): Effect.Effect<R, E, Option.Option<A>> =>
669
+ ): Effect.Effect<Option.Option<A>, E, R> =>
688
670
  core.flatMap(f(value, index), (result) => {
689
671
  if (result) {
690
672
  return core.succeed(Option.some(value))
@@ -697,7 +679,7 @@ const findLoop = <A, R, E>(
697
679
  })
698
680
 
699
681
  /* @internal */
700
- export const firstSuccessOf = <R, E, A>(effects: Iterable<Effect.Effect<R, E, A>>): Effect.Effect<R, E, A> =>
682
+ export const firstSuccessOf = <A, E, R>(effects: Iterable<Effect.Effect<A, E, R>>): Effect.Effect<A, E, R> =>
701
683
  core.suspend(() => {
702
684
  const list = Chunk.fromIterable(effects)
703
685
  if (!Chunk.isNonEmpty(list)) {
@@ -710,50 +692,65 @@ export const firstSuccessOf = <R, E, A>(effects: Iterable<Effect.Effect<R, E, A>
710
692
  })
711
693
 
712
694
  /* @internal */
713
- export const flipWith = dual<
714
- <R, A, E, R2, A2, E2>(
715
- f: (effect: Effect.Effect<R, A, E>) => Effect.Effect<R2, A2, E2>
716
- ) => (self: Effect.Effect<R, E, A>) => Effect.Effect<R2, E2, A2>,
717
- <R, A, E, R2, A2, E2>(
718
- self: Effect.Effect<R, E, A>,
719
- f: (effect: Effect.Effect<R, A, E>) => Effect.Effect<R2, A2, E2>
720
- ) => Effect.Effect<R2, E2, A2>
721
- >(2, (self, f) => core.flip(f(core.flip(self))))
695
+ export const flipWith: {
696
+ <E, A, R, E2, A2, R2>(
697
+ f: (effect: Effect.Effect<E, A, R>) => Effect.Effect<E2, A2, R2>
698
+ ): (self: Effect.Effect<A, E, R>) => Effect.Effect<A2, E2, R2>
699
+ <A, E, R, E2, A2, R2>(
700
+ self: Effect.Effect<A, E, R>,
701
+ f: (effect: Effect.Effect<E, A, R>) => Effect.Effect<E2, A2, R2>
702
+ ): Effect.Effect<A2, E2, R2>
703
+ } = dual(2, <A, E, R, E2, A2, R2>(
704
+ self: Effect.Effect<A, E, R>,
705
+ f: (effect: Effect.Effect<E, A, R>) => Effect.Effect<E2, A2, R2>
706
+ ): Effect.Effect<A2, E2, R2> => core.flip(f(core.flip(self))))
722
707
 
723
708
  /* @internal */
724
- export const match = dual<
725
- <E, A, A2, A3>(
709
+ export const match: {
710
+ <E, A2, A, A3>(
726
711
  options: {
727
712
  readonly onFailure: (error: E) => A2
728
713
  readonly onSuccess: (value: A) => A3
729
714
  }
730
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A2 | A3>,
731
- <R, E, A, A2, A3>(
732
- self: Effect.Effect<R, E, A>,
715
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, never, R>
716
+ <A, E, R, A2, A3>(
717
+ self: Effect.Effect<A, E, R>,
733
718
  options: {
734
719
  readonly onFailure: (error: E) => A2
735
720
  readonly onSuccess: (value: A) => A3
736
721
  }
737
- ) => Effect.Effect<R, never, A2 | A3>
738
- >(2, (self, { onFailure, onSuccess }) =>
722
+ ): Effect.Effect<A2 | A3, never, R>
723
+ } = dual(2, <A, E, R, A2, A3>(
724
+ self: Effect.Effect<A, E, R>,
725
+ options: {
726
+ readonly onFailure: (error: E) => A2
727
+ readonly onSuccess: (value: A) => A3
728
+ }
729
+ ): Effect.Effect<A2 | A3, never, R> =>
739
730
  core.matchEffect(self, {
740
- onFailure: (e) => core.succeed(onFailure(e)),
741
- onSuccess: (a) => core.succeed(onSuccess(a))
731
+ onFailure: (e) => core.succeed(options.onFailure(e)),
732
+ onSuccess: (a) => core.succeed(options.onSuccess(a))
742
733
  }))
743
734
 
744
735
  /* @internal */
745
- export const every = dual<
746
- <R, E, A>(
747
- f: (a: A, i: number) => Effect.Effect<R, E, boolean>
748
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, boolean>,
749
- <R, E, A>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, boolean>) => Effect.Effect<R, E, boolean>
750
- >(2, (elements, f) => core.suspend(() => forAllLoop(elements[Symbol.iterator](), 0, f)))
736
+ export const every: {
737
+ <A, E, R>(
738
+ f: (a: A, i: number) => Effect.Effect<boolean, E, R>
739
+ ): (elements: Iterable<A>) => Effect.Effect<boolean, E, R>
740
+ <A, E, R>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<boolean, E, R>): Effect.Effect<boolean, E, R>
741
+ } = dual(
742
+ 2,
743
+ <A, E, R>(
744
+ elements: Iterable<A>,
745
+ f: (a: A, i: number) => Effect.Effect<boolean, E, R>
746
+ ): Effect.Effect<boolean, E, R> => core.suspend(() => forAllLoop(elements[Symbol.iterator](), 0, f))
747
+ )
751
748
 
752
- const forAllLoop = <R, E, A>(
749
+ const forAllLoop = <A, E, R>(
753
750
  iterator: Iterator<A>,
754
751
  index: number,
755
- f: (a: A, i: number) => Effect.Effect<R, E, boolean>
756
- ): Effect.Effect<R, E, boolean> => {
752
+ f: (a: A, i: number) => Effect.Effect<boolean, E, R>
753
+ ): Effect.Effect<boolean, E, R> => {
757
754
  const next = iterator.next()
758
755
  return next.done
759
756
  ? core.succeed(true)
@@ -764,8 +761,8 @@ const forAllLoop = <R, E, A>(
764
761
  }
765
762
 
766
763
  /* @internal */
767
- export const forever = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, never> => {
768
- const loop: Effect.Effect<R, E, never> = core.flatMap(core.flatMap(self, () => core.yieldNow()), () => loop)
764
+ export const forever = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<never, E, R> => {
765
+ const loop: Effect.Effect<never, E, R> = core.flatMap(core.flatMap(self, () => core.yieldNow()), () => loop)
769
766
  return loop
770
767
  }
771
768
 
@@ -813,16 +810,14 @@ export const gen: typeof Effect.gen = function() {
813
810
  }
814
811
 
815
812
  /* @internal */
816
- export const fiberRefs: Effect.Effect<never, never, FiberRefs.FiberRefs> = core.withFiberRuntime<
817
- never,
818
- never,
819
- FiberRefs.FiberRefs
820
- >((state) => core.succeed(state.getFiberRefs()))
813
+ export const fiberRefs: Effect.Effect<FiberRefs.FiberRefs> = core.withFiberRuntime((state) =>
814
+ core.succeed(state.getFiberRefs())
815
+ )
821
816
 
822
817
  /* @internal */
823
- export const head = <R, E, A>(
824
- self: Effect.Effect<R, E, Iterable<A>>
825
- ): Effect.Effect<R, E | Cause.NoSuchElementException, A> =>
818
+ export const head = <A, E, R>(
819
+ self: Effect.Effect<Iterable<A>, E, R>
820
+ ): Effect.Effect<A, E | Cause.NoSuchElementException, R> =>
826
821
  core.flatMap(self, (as) => {
827
822
  const iterator = as[Symbol.iterator]()
828
823
  const next = iterator.next()
@@ -833,11 +828,11 @@ export const head = <R, E, A>(
833
828
  })
834
829
 
835
830
  /* @internal */
836
- export const ignore = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, void> =>
831
+ export const ignore = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<void, never, R> =>
837
832
  match(self, { onFailure: constVoid, onSuccess: constVoid })
838
833
 
839
834
  /* @internal */
840
- export const ignoreLogged = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, void> =>
835
+ export const ignoreLogged = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<void, never, R> =>
841
836
  core.matchCauseEffect(self, {
842
837
  onFailure: (cause) => logDebug(cause, "An error was silently ignored because it is not anticipated to be useful"),
843
838
  onSuccess: () => core.unit
@@ -848,22 +843,37 @@ export const inheritFiberRefs = (childFiberRefs: FiberRefs.FiberRefs) =>
848
843
  updateFiberRefs((parentFiberId, parentFiberRefs) => FiberRefs.joinAs(parentFiberRefs, parentFiberId, childFiberRefs))
849
844
 
850
845
  /* @internal */
851
- export const isFailure = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, boolean> =>
846
+ export const isFailure = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<boolean, never, R> =>
852
847
  match(self, { onFailure: constTrue, onSuccess: constFalse })
853
848
 
854
849
  /* @internal */
855
- export const isSuccess = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, boolean> =>
850
+ export const isSuccess = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<boolean, never, R> =>
856
851
  match(self, { onFailure: constFalse, onSuccess: constTrue })
857
852
 
858
853
  /* @internal */
859
- export const iterate = <Z, R, E>(
860
- initial: Z,
854
+ export const iterate: {
855
+ <A, B extends A, R, E>(
856
+ initial: A,
857
+ options: {
858
+ readonly while: Predicate.Refinement<A, B>
859
+ readonly body: (b: B) => Effect.Effect<A, E, R>
860
+ }
861
+ ): Effect.Effect<A, E, R>
862
+ <A, R, E>(
863
+ initial: A,
864
+ options: {
865
+ readonly while: Predicate.Predicate<A>
866
+ readonly body: (a: A) => Effect.Effect<A, E, R>
867
+ }
868
+ ): Effect.Effect<A, E, R>
869
+ } = <A, E, R>(
870
+ initial: A,
861
871
  options: {
862
- readonly while: Predicate.Predicate<Z>
863
- readonly body: (z: Z) => Effect.Effect<R, E, Z>
872
+ readonly while: Predicate.Predicate<A>
873
+ readonly body: (z: A) => Effect.Effect<A, E, R>
864
874
  }
865
- ): Effect.Effect<R, E, Z> =>
866
- core.suspend<R, E, Z>(() => {
875
+ ): Effect.Effect<A, E, R> =>
876
+ core.suspend<A, E, R>(() => {
867
877
  if (options.while(initial)) {
868
878
  return core.flatMap(options.body(initial), (z2) => iterate(z2, options))
869
879
  }
@@ -874,7 +884,7 @@ const logWithLevel = (level?: LogLevel.LogLevel) =>
874
884
  <A>(
875
885
  messageOrCause: A,
876
886
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
877
- ): Effect.Effect<never, never, void> => {
887
+ ): Effect.Effect<void> => {
878
888
  const levelOption = Option.fromNullable(level)
879
889
  let message: unknown
880
890
  let cause: Cause.Cause<unknown>
@@ -885,7 +895,7 @@ const logWithLevel = (level?: LogLevel.LogLevel) =>
885
895
  message = messageOrCause
886
896
  cause = (supplementary as Cause.Cause<unknown>) ?? internalCause.empty
887
897
  }
888
- return core.withFiberRuntime<never, never, void>((fiberState) => {
898
+ return core.withFiberRuntime((fiberState) => {
889
899
  fiberState.log(message, cause, levelOption)
890
900
  return core.unit
891
901
  })
@@ -895,48 +905,48 @@ const logWithLevel = (level?: LogLevel.LogLevel) =>
895
905
  export const log: <A>(
896
906
  messageOrCause: A,
897
907
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
898
- ) => Effect.Effect<never, never, void> = logWithLevel()
908
+ ) => Effect.Effect<void> = logWithLevel()
899
909
 
900
910
  /** @internal */
901
911
  export const logTrace: <A>(
902
912
  messageOrCause: A,
903
913
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
904
- ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Trace)
914
+ ) => Effect.Effect<void> = logWithLevel(LogLevel.Trace)
905
915
 
906
916
  /** @internal */
907
917
  export const logDebug: <A>(
908
918
  messageOrCause: A,
909
919
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
910
- ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Debug)
920
+ ) => Effect.Effect<void> = logWithLevel(LogLevel.Debug)
911
921
 
912
922
  /** @internal */
913
923
  export const logInfo: <A>(
914
924
  messageOrCause: A,
915
925
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
916
- ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Info)
926
+ ) => Effect.Effect<void> = logWithLevel(LogLevel.Info)
917
927
 
918
928
  /** @internal */
919
929
  export const logWarning: <A>(
920
930
  messageOrCause: A,
921
931
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
922
- ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Warning)
932
+ ) => Effect.Effect<void> = logWithLevel(LogLevel.Warning)
923
933
 
924
934
  /** @internal */
925
935
  export const logError: <A>(
926
936
  messageOrCause: A,
927
937
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
928
- ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Error)
938
+ ) => Effect.Effect<void> = logWithLevel(LogLevel.Error)
929
939
 
930
940
  /** @internal */
931
941
  export const logFatal: <A>(
932
942
  messageOrCause: A,
933
943
  supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
934
- ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Fatal)
944
+ ) => Effect.Effect<void> = logWithLevel(LogLevel.Fatal)
935
945
 
936
946
  /* @internal */
937
947
  export const withLogSpan = dual<
938
- (label: string) => <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
939
- <R, E, A>(effect: Effect.Effect<R, E, A>, label: string) => Effect.Effect<R, E, A>
948
+ (label: string) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
949
+ <A, E, R>(effect: Effect.Effect<A, E, R>, label: string) => Effect.Effect<A, E, R>
940
950
  >(2, (effect, label) =>
941
951
  core.flatMap(Clock.currentTimeMillis, (now) =>
942
952
  core.fiberRefLocallyWith(
@@ -946,51 +956,68 @@ export const withLogSpan = dual<
946
956
  )))
947
957
 
948
958
  /* @internal */
949
- export const logAnnotations: Effect.Effect<never, never, HashMap.HashMap<string, unknown>> = core
959
+ export const logAnnotations: Effect.Effect<HashMap.HashMap<string, unknown>> = core
950
960
  .fiberRefGet(
951
961
  core.currentLogAnnotations
952
962
  )
953
963
 
954
964
  /* @internal */
955
- // @ts-expect-error
956
965
  export const loop: {
957
- <Z, R, E, A>(
958
- initial: Z,
966
+ <A, B extends A, C, E, R>(
967
+ initial: A,
959
968
  options: {
960
- readonly while: Predicate.Predicate<Z>
961
- readonly step: (z: Z) => Z
962
- readonly body: (z: Z) => Effect.Effect<R, E, A>
969
+ readonly while: Predicate.Refinement<A, B>
970
+ readonly step: (b: B) => A
971
+ readonly body: (b: B) => Effect.Effect<C, E, R>
963
972
  readonly discard?: false | undefined
964
973
  }
965
- ): Effect.Effect<R, E, Array<A>>
966
- <Z, R, E, A>(
967
- initial: Z,
974
+ ): Effect.Effect<Array<C>, E, R>
975
+ <A, C, E, R>(
976
+ initial: A,
968
977
  options: {
969
- readonly while: Predicate.Predicate<Z>
970
- readonly step: (z: Z) => Z
971
- readonly body: (z: Z) => Effect.Effect<R, E, A>
978
+ readonly while: (a: A) => boolean
979
+ readonly step: (a: A) => A
980
+ readonly body: (a: A) => Effect.Effect<C, E, R>
981
+ readonly discard?: false | undefined
982
+ }
983
+ ): Effect.Effect<Array<C>, E, R>
984
+ <A, B extends A, C, E, R>(
985
+ initial: A,
986
+ options: {
987
+ readonly while: Predicate.Refinement<A, B>
988
+ readonly step: (b: B) => A
989
+ readonly body: (b: B) => Effect.Effect<R, E, C>
972
990
  readonly discard: true
973
991
  }
974
- ): Effect.Effect<R, E, void>
975
- } = <Z, R, E, A>(
976
- initial: Z,
992
+ ): Effect.Effect<void, E, R>
993
+ <A, C, E, R>(
994
+ initial: A,
995
+ options: {
996
+ readonly while: (a: A) => boolean
997
+ readonly step: (a: A) => A
998
+ readonly body: (a: A) => Effect.Effect<C, E, R>
999
+ readonly discard: true
1000
+ }
1001
+ ): Effect.Effect<void, E, R>
1002
+ } = <A, C, E, R>(
1003
+ initial: A,
977
1004
  options: {
978
- readonly while: Predicate.Predicate<Z>
979
- readonly step: (z: Z) => Z
980
- readonly body: (z: Z) => Effect.Effect<R, E, A>
1005
+ readonly while: Predicate.Predicate<A>
1006
+ readonly step: (a: A) => A
1007
+ readonly body: (a: A) => Effect.Effect<C, E, R>
981
1008
  readonly discard?: boolean | undefined
982
1009
  }
983
- ): Effect.Effect<R, E, Array<A>> | Effect.Effect<R, E, void> =>
1010
+ ): any =>
984
1011
  options.discard
985
1012
  ? loopDiscard(initial, options.while, options.step, options.body)
986
- : core.map(loopInternal(initial, options.while, options.step, options.body), (x) => Array.from(x))
1013
+ : core.map(loopInternal(initial, options.while, options.step, options.body), Array.from)
987
1014
 
988
1015
  const loopInternal = <Z, R, E, A>(
989
1016
  initial: Z,
990
1017
  cont: Predicate.Predicate<Z>,
991
1018
  inc: (z: Z) => Z,
992
- body: (z: Z) => Effect.Effect<R, E, A>
993
- ): Effect.Effect<R, E, List.List<A>> =>
1019
+ body: (z: Z) => Effect.Effect<A, E, R>
1020
+ ): Effect.Effect<List.List<A>, E, R> =>
994
1021
  core.suspend(() =>
995
1022
  cont(initial)
996
1023
  ? core.flatMap(body(initial), (a) =>
@@ -1001,12 +1028,12 @@ const loopInternal = <Z, R, E, A>(
1001
1028
  : core.sync(() => List.empty())
1002
1029
  )
1003
1030
 
1004
- const loopDiscard = <Z, R, E, X>(
1005
- initial: Z,
1006
- cont: Predicate.Predicate<Z>,
1007
- inc: (z: Z) => Z,
1008
- body: (z: Z) => Effect.Effect<R, E, X>
1009
- ): Effect.Effect<R, E, void> =>
1031
+ const loopDiscard = <S, X, E, R>(
1032
+ initial: S,
1033
+ cont: Predicate.Predicate<S>,
1034
+ inc: (s: S) => S,
1035
+ body: (s: S) => Effect.Effect<X, E, R>
1036
+ ): Effect.Effect<void, E, R> =>
1010
1037
  core.suspend(() =>
1011
1038
  cont(initial)
1012
1039
  ? core.flatMap(
@@ -1017,25 +1044,25 @@ const loopDiscard = <Z, R, E, X>(
1017
1044
  )
1018
1045
 
1019
1046
  /* @internal */
1020
- export const mapAccum = dual<
1021
- <A, B, R, E, Z>(
1022
- zero: Z,
1023
- f: (z: Z, a: A, i: number) => Effect.Effect<R, E, readonly [Z, B]>
1024
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, [Z, Array<B>]>,
1025
- <A, B, R, E, Z>(
1047
+ export const mapAccum: {
1048
+ <S, A, B, E, R>(
1049
+ zero: S,
1050
+ f: (s: S, a: A, i: number) => Effect.Effect<readonly [S, B], E, R>
1051
+ ): (elements: Iterable<A>) => Effect.Effect<[S, Array<B>], E, R>
1052
+ <A, S, B, E, R>(
1026
1053
  elements: Iterable<A>,
1027
- zero: Z,
1028
- f: (z: Z, a: A, i: number) => Effect.Effect<R, E, readonly [Z, B]>
1029
- ) => Effect.Effect<R, E, [Z, Array<B>]>
1030
- >(3, <A, B, R, E, Z>(
1054
+ zero: S,
1055
+ f: (s: S, a: A, i: number) => Effect.Effect<readonly [S, B], E, R>
1056
+ ): Effect.Effect<[S, Array<B>], E, R>
1057
+ } = dual(3, <A, S, B, E, R>(
1031
1058
  elements: Iterable<A>,
1032
- zero: Z,
1033
- f: (z: Z, a: A, i: number) => Effect.Effect<R, E, readonly [Z, B]>
1034
- ): Effect.Effect<R, E, [Z, Array<B>]> =>
1059
+ zero: S,
1060
+ f: (s: S, a: A, i: number) => Effect.Effect<readonly [S, B], E, R>
1061
+ ): Effect.Effect<[S, Array<B>], E, R> =>
1035
1062
  core.suspend(() => {
1036
1063
  const iterator = elements[Symbol.iterator]()
1037
1064
  const builder: Array<B> = []
1038
- let result: Effect.Effect<R, E, Z> = core.succeed(zero)
1065
+ let result: Effect.Effect<S, E, R> = core.succeed(zero)
1039
1066
  let next: IteratorResult<A, any>
1040
1067
  let i = 0
1041
1068
  while (!(next = iterator.next()).done) {
@@ -1050,23 +1077,26 @@ export const mapAccum = dual<
1050
1077
  }))
1051
1078
 
1052
1079
  /* @internal */
1053
- export const mapErrorCause = dual<
1080
+ export const mapErrorCause: {
1054
1081
  <E, E2>(
1055
1082
  f: (cause: Cause.Cause<E>) => Cause.Cause<E2>
1056
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A>,
1057
- <R, E, A, E2>(self: Effect.Effect<R, E, A>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => Effect.Effect<R, E2, A>
1058
- >(2, (self, f) =>
1059
- core.matchCauseEffect(self, {
1060
- onFailure: (c) => core.failCauseSync(() => f(c)),
1061
- onSuccess: core.succeed
1062
- }))
1083
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2, R>
1084
+ <A, E, R, E2>(self: Effect.Effect<A, E, R>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>): Effect.Effect<A, E2, R>
1085
+ } = dual(
1086
+ 2,
1087
+ <A, E, R, E2>(self: Effect.Effect<A, E, R>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>): Effect.Effect<A, E2, R> =>
1088
+ core.matchCauseEffect(self, {
1089
+ onFailure: (c) => core.failCauseSync(() => f(c)),
1090
+ onSuccess: core.succeed
1091
+ })
1092
+ )
1063
1093
 
1064
1094
  /* @internal */
1065
- export const memoize = <R, E, A>(
1066
- self: Effect.Effect<R, E, A>
1067
- ): Effect.Effect<never, never, Effect.Effect<R, E, A>> =>
1095
+ export const memoize = <A, E, R>(
1096
+ self: Effect.Effect<A, E, R>
1097
+ ): Effect.Effect<Effect.Effect<A, E, R>> =>
1068
1098
  pipe(
1069
- core.deferredMake<E, [[FiberRefsPatch.FiberRefsPatch, runtimeFlagsPatch.RuntimeFlagsPatch], A]>(),
1099
+ core.deferredMake<[[FiberRefsPatch.FiberRefsPatch, runtimeFlagsPatch.RuntimeFlagsPatch], A], E>(),
1070
1100
  core.flatMap((deferred) =>
1071
1101
  pipe(
1072
1102
  diffFiberRefsAndRuntimeFlags(self),
@@ -1088,42 +1118,40 @@ export const memoize = <R, E, A>(
1088
1118
  )
1089
1119
 
1090
1120
  /* @internal */
1091
- export const merge = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, E | A> =>
1121
+ export const merge = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<E | A, never, R> =>
1092
1122
  core.matchEffect(self, {
1093
1123
  onFailure: (e) => core.succeed(e),
1094
1124
  onSuccess: core.succeed
1095
1125
  })
1096
1126
 
1097
1127
  /* @internal */
1098
- export const negate = <R, E>(self: Effect.Effect<R, E, boolean>): Effect.Effect<R, E, boolean> =>
1128
+ export const negate = <R, E>(self: Effect.Effect<boolean, E, R>): Effect.Effect<boolean, E, R> =>
1099
1129
  core.map(self, (b) => !b)
1100
1130
 
1101
1131
  /* @internal */
1102
- export const none = <R, E, A>(
1103
- self: Effect.Effect<R, E, Option.Option<A>>
1104
- ): Effect.Effect<R, E | Cause.NoSuchElementException, void> =>
1132
+ export const none = <A, E, R>(
1133
+ self: Effect.Effect<Option.Option<A>, E, R>
1134
+ ): Effect.Effect<void, E | Cause.NoSuchElementException, R> =>
1105
1135
  core.flatMap(self, (option) => {
1106
1136
  switch (option._tag) {
1107
- case "None": {
1137
+ case "None":
1108
1138
  return core.unit
1109
- }
1110
- case "Some": {
1139
+ case "Some":
1111
1140
  return core.fail(new core.NoSuchElementException())
1112
- }
1113
1141
  }
1114
1142
  })
1115
1143
 
1116
1144
  /* @internal */
1117
- export const once = <R, E, A>(
1118
- self: Effect.Effect<R, E, A>
1119
- ): Effect.Effect<never, never, Effect.Effect<R, E, void>> =>
1145
+ export const once = <A, E, R>(
1146
+ self: Effect.Effect<A, E, R>
1147
+ ): Effect.Effect<Effect.Effect<void, E, R>> =>
1120
1148
  core.map(
1121
1149
  Ref.make(true),
1122
1150
  (ref) => core.asUnit(core.whenEffect(self, Ref.getAndSet(ref, false)))
1123
1151
  )
1124
1152
 
1125
1153
  /* @internal */
1126
- export const option = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Option.Option<A>> =>
1154
+ export const option = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Option.Option<A>, never, R> =>
1127
1155
  core.matchEffect(self, {
1128
1156
  onFailure: () => core.succeed(Option.none()),
1129
1157
  onSuccess: (a) => core.succeed(Option.some(a))
@@ -1131,18 +1159,18 @@ export const option = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R,
1131
1159
 
1132
1160
  /* @internal */
1133
1161
  export const orElseFail = dual<
1134
- <E2>(evaluate: LazyArg<E2>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A>,
1135
- <R, E, A, E2>(self: Effect.Effect<R, E, A>, evaluate: LazyArg<E2>) => Effect.Effect<R, E2, A>
1162
+ <E2>(evaluate: LazyArg<E2>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2, R>,
1163
+ <A, E, R, E2>(self: Effect.Effect<A, E, R>, evaluate: LazyArg<E2>) => Effect.Effect<A, E2, R>
1136
1164
  >(2, (self, evaluate) => core.orElse(self, () => core.failSync(evaluate)))
1137
1165
 
1138
1166
  /* @internal */
1139
1167
  export const orElseSucceed = dual<
1140
- <A2>(evaluate: LazyArg<A2>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A | A2>,
1141
- <R, E, A, A2>(self: Effect.Effect<R, E, A>, evaluate: LazyArg<A2>) => Effect.Effect<R, never, A | A2>
1168
+ <A2>(evaluate: LazyArg<A2>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, never, R>,
1169
+ <A, E, R, A2>(self: Effect.Effect<A, E, R>, evaluate: LazyArg<A2>) => Effect.Effect<A | A2, never, R>
1142
1170
  >(2, (self, evaluate) => core.orElse(self, () => core.sync(evaluate)))
1143
1171
 
1144
1172
  /* @internal */
1145
- export const parallelErrors = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, Array<E>, A> =>
1173
+ export const parallelErrors = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, Array<E>, R> =>
1146
1174
  core.matchCauseEffect(self, {
1147
1175
  onFailure: (cause) => {
1148
1176
  const errors = Array.from(internalCause.failures(cause))
@@ -1154,18 +1182,18 @@ export const parallelErrors = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Ef
1154
1182
  })
1155
1183
 
1156
1184
  /* @internal */
1157
- export const patchFiberRefs = (patch: FiberRefsPatch.FiberRefsPatch): Effect.Effect<never, never, void> =>
1185
+ export const patchFiberRefs = (patch: FiberRefsPatch.FiberRefsPatch): Effect.Effect<void> =>
1158
1186
  updateFiberRefs((fiberId, fiberRefs) => pipe(patch, fiberRefsPatch.patch(fiberId, fiberRefs)))
1159
1187
 
1160
1188
  /* @internal */
1161
- export const promise = <A>(evaluate: (signal: AbortSignal) => Promise<A>): Effect.Effect<never, never, A> =>
1189
+ export const promise = <A>(evaluate: (signal: AbortSignal) => Promise<A>): Effect.Effect<A> =>
1162
1190
  evaluate.length >= 1
1163
- ? core.async<never, never, A>((resolve, signal) => {
1191
+ ? core.async((resolve, signal) => {
1164
1192
  evaluate(signal)
1165
1193
  .then((a) => resolve(core.exitSucceed(a)))
1166
1194
  .catch((e) => resolve(core.exitDie(e)))
1167
1195
  })
1168
- : core.async<never, never, A>((resolve) => {
1196
+ : core.async((resolve) => {
1169
1197
  ;(evaluate as LazyArg<Promise<A>>)()
1170
1198
  .then((a) => resolve(core.exitSucceed(a)))
1171
1199
  .catch((e) => resolve(core.exitDie(e)))
@@ -1176,22 +1204,22 @@ export const provideService = dual<
1176
1204
  <T extends Context.Tag<any, any>>(
1177
1205
  tag: T,
1178
1206
  service: Context.Tag.Service<T>
1179
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Context.Tag.Identifier<T>>, E, A>,
1180
- <R, E, A, T extends Context.Tag<any, any>>(
1181
- self: Effect.Effect<R, E, A>,
1207
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>>,
1208
+ <A, E, R, T extends Context.Tag<any, any>>(
1209
+ self: Effect.Effect<A, E, R>,
1182
1210
  tag: T,
1183
1211
  service: Context.Tag.Service<T>
1184
- ) => Effect.Effect<Exclude<R, Context.Tag.Identifier<T>>, E, A>
1212
+ ) => Effect.Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>>
1185
1213
  >(
1186
1214
  3,
1187
- <R, E, A, T extends Context.Tag<any, any>>(
1188
- self: Effect.Effect<R, E, A>,
1215
+ <A, E, R, T extends Context.Tag<any, any>>(
1216
+ self: Effect.Effect<A, E, R>,
1189
1217
  tag: T,
1190
1218
  service: Context.Tag.Service<T>
1191
- ): Effect.Effect<Exclude<R, Context.Tag.Identifier<T>>, E, A> =>
1219
+ ): Effect.Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>> =>
1192
1220
  core.contextWithEffect((env) =>
1193
1221
  core.provideContext(
1194
- self as Effect.Effect<Context.Tag.Identifier<T> | Exclude<R, Context.Tag.Identifier<T>>, E, A>,
1222
+ self as Effect.Effect<A, E, Context.Tag.Identifier<T> | Exclude<R, Context.Tag.Identifier<T>>>,
1195
1223
  Context.add(env, tag, service)
1196
1224
  )
1197
1225
  )
@@ -1199,19 +1227,19 @@ export const provideService = dual<
1199
1227
 
1200
1228
  /* @internal */
1201
1229
  export const provideServiceEffect = dual<
1202
- <T extends Context.Tag<any, any>, R1, E1>(
1230
+ <T extends Context.Tag<any, any>, E1, R1>(
1203
1231
  tag: T,
1204
- effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
1205
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R1 | Exclude<R, Context.Tag.Identifier<T>>, E | E1, A>,
1206
- <R, E, A, T extends Context.Tag<any, any>, R1, E1>(
1207
- self: Effect.Effect<R, E, A>,
1232
+ effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
1233
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E1, R1 | Exclude<R, Context.Tag.Identifier<T>>>,
1234
+ <A, E, R, T extends Context.Tag<any, any>, E1, R1>(
1235
+ self: Effect.Effect<A, E, R>,
1208
1236
  tag: T,
1209
- effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
1210
- ) => Effect.Effect<R1 | Exclude<R, Context.Tag.Identifier<T>>, E | E1, A>
1211
- >(3, <R, E, A, T extends Context.Tag<any, any>, R1, E1>(
1212
- self: Effect.Effect<R, E, A>,
1237
+ effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
1238
+ ) => Effect.Effect<A, E | E1, R1 | Exclude<R, Context.Tag.Identifier<T>>>
1239
+ >(3, <A, E, R, T extends Context.Tag<any, any>, E1, R1>(
1240
+ self: Effect.Effect<A, E, R>,
1213
1241
  tag: T,
1214
- effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
1242
+ effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
1215
1243
  ) =>
1216
1244
  core.contextWithEffect((env: Context.Context<R1 | Exclude<R, Context.Tag.Identifier<T>>>) =>
1217
1245
  core.flatMap(
@@ -1221,25 +1249,29 @@ export const provideServiceEffect = dual<
1221
1249
  ))
1222
1250
 
1223
1251
  /* @internal */
1224
- export const random: Effect.Effect<never, never, Random.Random> = defaultServices.randomWith(core.succeed)
1252
+ export const random: Effect.Effect<Random.Random> = defaultServices.randomWith(core.succeed)
1225
1253
 
1226
1254
  /* @internal */
1227
1255
  export const reduce = dual<
1228
- <Z, A, R, E>(
1256
+ <Z, A, E, R>(
1229
1257
  zero: Z,
1230
- f: (z: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1231
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Z>,
1232
- <Z, A, R, E>(
1258
+ f: (z: Z, a: A, i: number) => Effect.Effect<Z, E, R>
1259
+ ) => (elements: Iterable<A>) => Effect.Effect<Z, E, R>,
1260
+ <A, Z, E, R>(
1233
1261
  elements: Iterable<A>,
1234
1262
  zero: Z,
1235
- f: (z: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1236
- ) => Effect.Effect<R, E, Z>
1263
+ f: (z: Z, a: A, i: number) => Effect.Effect<Z, E, R>
1264
+ ) => Effect.Effect<Z, E, R>
1237
1265
  >(
1238
1266
  3,
1239
- <Z, A, R, E>(elements: Iterable<A>, zero: Z, f: (z: Z, a: A, i: number) => Effect.Effect<R, E, Z>) =>
1267
+ <A, Z, E, R>(
1268
+ elements: Iterable<A>,
1269
+ zero: Z,
1270
+ f: (z: Z, a: A, i: number) => Effect.Effect<Z, E, R>
1271
+ ) =>
1240
1272
  ReadonlyArray.fromIterable(elements).reduce(
1241
1273
  (acc, el, i) => core.flatMap(acc, (a) => f(a, el, i)),
1242
- core.succeed(zero) as Effect.Effect<R, E, Z>
1274
+ core.succeed(zero) as Effect.Effect<Z, E, R>
1243
1275
  )
1244
1276
  )
1245
1277
 
@@ -1247,19 +1279,19 @@ export const reduce = dual<
1247
1279
  export const reduceRight = dual<
1248
1280
  <A, Z, R, E>(
1249
1281
  zero: Z,
1250
- f: (a: A, z: Z, i: number) => Effect.Effect<R, E, Z>
1251
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Z>,
1282
+ f: (a: A, z: Z, i: number) => Effect.Effect<Z, E, R>
1283
+ ) => (elements: Iterable<A>) => Effect.Effect<Z, E, R>,
1252
1284
  <A, Z, R, E>(
1253
1285
  elements: Iterable<A>,
1254
1286
  zero: Z,
1255
- f: (a: A, z: Z, i: number) => Effect.Effect<R, E, Z>
1256
- ) => Effect.Effect<R, E, Z>
1287
+ f: (a: A, z: Z, i: number) => Effect.Effect<Z, E, R>
1288
+ ) => Effect.Effect<Z, E, R>
1257
1289
  >(
1258
1290
  3,
1259
- <A, Z, R, E>(elements: Iterable<A>, zero: Z, f: (a: A, z: Z, i: number) => Effect.Effect<R, E, Z>) =>
1291
+ <A, Z, R, E>(elements: Iterable<A>, zero: Z, f: (a: A, z: Z, i: number) => Effect.Effect<Z, E, R>) =>
1260
1292
  ReadonlyArray.fromIterable(elements).reduceRight(
1261
1293
  (acc, el, i) => core.flatMap(acc, (a) => f(el, a, i)),
1262
- core.succeed(zero) as Effect.Effect<R, E, Z>
1294
+ core.succeed(zero) as Effect.Effect<Z, E, R>
1263
1295
  )
1264
1296
  )
1265
1297
 
@@ -1269,23 +1301,23 @@ export const reduceWhile = dual<
1269
1301
  zero: Z,
1270
1302
  options: {
1271
1303
  readonly while: Predicate.Predicate<Z>
1272
- readonly body: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1304
+ readonly body: (s: Z, a: A, i: number) => Effect.Effect<Z, E, R>
1273
1305
  }
1274
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Z>,
1306
+ ) => (elements: Iterable<A>) => Effect.Effect<Z, E, R>,
1275
1307
  <A, R, E, Z>(
1276
1308
  elements: Iterable<A>,
1277
1309
  zero: Z,
1278
1310
  options: {
1279
1311
  readonly while: Predicate.Predicate<Z>
1280
- readonly body: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1312
+ readonly body: (s: Z, a: A, i: number) => Effect.Effect<Z, E, R>
1281
1313
  }
1282
- ) => Effect.Effect<R, E, Z>
1314
+ ) => Effect.Effect<Z, E, R>
1283
1315
  >(3, <A, R, E, Z>(
1284
1316
  elements: Iterable<A>,
1285
1317
  zero: Z,
1286
1318
  options: {
1287
1319
  readonly while: Predicate.Predicate<Z>
1288
- readonly body: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1320
+ readonly body: (s: Z, a: A, i: number) => Effect.Effect<Z, E, R>
1289
1321
  }
1290
1322
  ) =>
1291
1323
  core.flatMap(
@@ -1298,8 +1330,8 @@ const reduceWhileLoop = <A, R, E, Z>(
1298
1330
  index: number,
1299
1331
  state: Z,
1300
1332
  predicate: Predicate.Predicate<Z>,
1301
- f: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1302
- ): Effect.Effect<R, E, Z> => {
1333
+ f: (s: Z, a: A, i: number) => Effect.Effect<Z, E, R>
1334
+ ): Effect.Effect<Z, E, R> => {
1303
1335
  const next = iterator.next()
1304
1336
  if (!next.done && predicate(state)) {
1305
1337
  return core.flatMap(
@@ -1312,52 +1344,55 @@ const reduceWhileLoop = <A, R, E, Z>(
1312
1344
 
1313
1345
  /* @internal */
1314
1346
  export const repeatN = dual<
1315
- (n: number) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1316
- <R, E, A>(self: Effect.Effect<R, E, A>, n: number) => Effect.Effect<R, E, A>
1347
+ (n: number) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1348
+ <A, E, R>(self: Effect.Effect<A, E, R>, n: number) => Effect.Effect<A, E, R>
1317
1349
  >(2, (self, n) => core.suspend(() => repeatNLoop(self, n)))
1318
1350
 
1319
1351
  /* @internal */
1320
- const repeatNLoop = <R, E, A>(self: Effect.Effect<R, E, A>, n: number): Effect.Effect<R, E, A> =>
1352
+ const repeatNLoop = <A, E, R>(self: Effect.Effect<A, E, R>, n: number): Effect.Effect<A, E, R> =>
1321
1353
  core.flatMap(self, (a) =>
1322
1354
  n <= 0
1323
1355
  ? core.succeed(a)
1324
1356
  : core.zipRight(core.yieldNow(), repeatNLoop(self, n - 1)))
1325
1357
 
1326
1358
  /* @internal */
1327
- export const sandbox = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, Cause.Cause<E>, A> =>
1359
+ export const sandbox = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, Cause.Cause<E>, R> =>
1328
1360
  core.matchCauseEffect(self, {
1329
1361
  onFailure: core.fail,
1330
1362
  onSuccess: core.succeed
1331
1363
  })
1332
1364
 
1333
1365
  /* @internal */
1334
- export const setFiberRefs = (fiberRefs: FiberRefs.FiberRefs): Effect.Effect<never, never, void> =>
1366
+ export const setFiberRefs = (fiberRefs: FiberRefs.FiberRefs): Effect.Effect<void> =>
1335
1367
  core.suspend(() => FiberRefs.setAll(fiberRefs))
1336
1368
 
1337
1369
  /* @internal */
1338
- export const sleep: (duration: Duration.DurationInput) => Effect.Effect<never, never, void> = Clock.sleep
1370
+ export const sleep: (duration: Duration.DurationInput) => Effect.Effect<void> = Clock.sleep
1339
1371
 
1340
1372
  /* @internal */
1341
- export const succeedNone: Effect.Effect<never, never, Option.Option<never>> = core.succeed(Option.none())
1373
+ export const succeedNone: Effect.Effect<Option.Option<never>> = core.succeed(Option.none())
1342
1374
 
1343
1375
  /* @internal */
1344
- export const succeedSome = <A>(value: A): Effect.Effect<never, never, Option.Option<A>> =>
1345
- core.succeed(Option.some(value))
1376
+ export const succeedSome = <A>(value: A): Effect.Effect<Option.Option<A>> => core.succeed(Option.some(value))
1346
1377
 
1347
1378
  /* @internal */
1348
- export const summarized = dual<
1349
- <R2, E2, B, C>(
1350
- summary: Effect.Effect<R2, E2, B>,
1379
+ export const summarized: {
1380
+ <B, E2, R2, C>(
1381
+ summary: Effect.Effect<B, E2, R2>,
1351
1382
  f: (start: B, end: B) => C
1352
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, [C, A]>,
1353
- <R, E, A, R2, E2, B, C>(
1354
- self: Effect.Effect<R, E, A>,
1355
- summary: Effect.Effect<R2, E2, B>,
1383
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<[C, A], E2 | E, R2 | R>
1384
+ <A, E, R, B, E2, R2, C>(
1385
+ self: Effect.Effect<A, E, R>,
1386
+ summary: Effect.Effect<B, E2, R2>,
1356
1387
  f: (start: B, end: B) => C
1357
- ) => Effect.Effect<R | R2, E | E2, [C, A]>
1358
- >(
1388
+ ): Effect.Effect<[C, A], E2 | E, R2 | R>
1389
+ } = dual(
1359
1390
  3,
1360
- (self, summary, f) =>
1391
+ <A, E, R, B, E2, R2, C>(
1392
+ self: Effect.Effect<A, E, R>,
1393
+ summary: Effect.Effect<B, E2, R2>,
1394
+ f: (start: B, end: B) => C
1395
+ ): Effect.Effect<[C, A], E2 | E, R2 | R> =>
1361
1396
  core.flatMap(
1362
1397
  summary,
1363
1398
  (start) => core.flatMap(self, (value) => core.map(summary, (end) => [f(start, end), value]))
@@ -1367,14 +1402,14 @@ export const summarized = dual<
1367
1402
  /* @internal */
1368
1403
  export const tagMetrics = dual<
1369
1404
  {
1370
- (key: string, value: string): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1405
+ (key: string, value: string): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
1371
1406
  (
1372
1407
  values: Record<string, string>
1373
- ): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1408
+ ): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
1374
1409
  },
1375
1410
  {
1376
- <R, E, A>(effect: Effect.Effect<R, E, A>, key: string, value: string): Effect.Effect<R, E, A>
1377
- <R, E, A>(effect: Effect.Effect<R, E, A>, values: Record<string, string>): Effect.Effect<R, E, A>
1411
+ <A, E, R>(effect: Effect.Effect<A, E, R>, key: string, value: string): Effect.Effect<A, E, R>
1412
+ <A, E, R>(effect: Effect.Effect<A, E, R>, values: Record<string, string>): Effect.Effect<A, E, R>
1378
1413
  }
1379
1414
  >((args) => core.isEffect(args[0]), function() {
1380
1415
  return labelMetrics(
@@ -1387,8 +1422,8 @@ export const tagMetrics = dual<
1387
1422
 
1388
1423
  /* @internal */
1389
1424
  export const labelMetrics = dual<
1390
- (labels: Iterable<MetricLabel.MetricLabel>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1391
- <R, E, A>(self: Effect.Effect<R, E, A>, labels: Iterable<MetricLabel.MetricLabel>) => Effect.Effect<R, E, A>
1425
+ (labels: Iterable<MetricLabel.MetricLabel>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1426
+ <A, E, R>(self: Effect.Effect<A, E, R>, labels: Iterable<MetricLabel.MetricLabel>) => Effect.Effect<A, E, R>
1392
1427
  >(
1393
1428
  2,
1394
1429
  (self, labels) => core.fiberRefLocallyWith(self, core.currentMetricLabels, (old) => ReadonlyArray.union(old, labels))
@@ -1397,23 +1432,23 @@ export const labelMetrics = dual<
1397
1432
  /* @internal */
1398
1433
  export const takeUntil: {
1399
1434
  <A, R, E>(
1400
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
1401
- ): (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>
1402
- <R, E, A>(
1435
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1436
+ ): (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>
1437
+ <A, E, R>(
1403
1438
  elements: Iterable<A>,
1404
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1405
- ): Effect.Effect<R, E, Array<A>>
1439
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1440
+ ): Effect.Effect<Array<A>, E, R>
1406
1441
  } = dual(
1407
1442
  2,
1408
- <R, E, A>(
1443
+ <A, E, R>(
1409
1444
  elements: Iterable<A>,
1410
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1411
- ): Effect.Effect<R, E, Array<A>> =>
1445
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1446
+ ): Effect.Effect<Array<A>, E, R> =>
1412
1447
  core.suspend(() => {
1413
1448
  const iterator = elements[Symbol.iterator]()
1414
1449
  const builder: Array<A> = []
1415
1450
  let next: IteratorResult<A, any>
1416
- let effect: Effect.Effect<R, E, boolean> = core.succeed(false)
1451
+ let effect: Effect.Effect<boolean, E, R> = core.succeed(false)
1417
1452
  let i = 0
1418
1453
  while ((next = iterator.next()) && !next.done) {
1419
1454
  const a = next.value
@@ -1432,21 +1467,21 @@ export const takeUntil: {
1432
1467
 
1433
1468
  /* @internal */
1434
1469
  export const takeWhile = dual<
1435
- <R, E, A>(
1436
- predicate: (a: NoInfer<A>, i: number) => Effect.Effect<R, E, boolean>
1437
- ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
1438
- <R, E, A>(
1470
+ <A, E, R>(
1471
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1472
+ ) => (elements: Iterable<A>) => Effect.Effect<Array<A>, E, R>,
1473
+ <A, E, R>(
1439
1474
  elements: Iterable<A>,
1440
- predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1441
- ) => Effect.Effect<R, E, Array<A>>
1475
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
1476
+ ) => Effect.Effect<Array<A>, E, R>
1442
1477
  >(
1443
1478
  2,
1444
- <R, E, A>(elements: Iterable<A>, predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>) =>
1479
+ <A, E, R>(elements: Iterable<A>, predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>) =>
1445
1480
  core.suspend(() => {
1446
1481
  const iterator = elements[Symbol.iterator]()
1447
1482
  const builder: Array<A> = []
1448
1483
  let next: IteratorResult<A, any>
1449
- let taking: Effect.Effect<R, E, boolean> = core.succeed(true)
1484
+ let taking: Effect.Effect<boolean, E, R> = core.succeed(true)
1450
1485
  let i = 0
1451
1486
  while ((next = iterator.next()) && !next.done) {
1452
1487
  const a = next.value
@@ -1468,19 +1503,19 @@ export const takeWhile = dual<
1468
1503
 
1469
1504
  /* @internal */
1470
1505
  export const tapBoth = dual<
1471
- <E, XE extends E, A, XA extends A, R2, E2, X, R3, E3, X1>(
1506
+ <E, X, E2, R2, A, X1, E3, R3>(
1472
1507
  options: {
1473
- readonly onFailure: (e: XE) => Effect.Effect<R2, E2, X>
1474
- readonly onSuccess: (a: XA) => Effect.Effect<R3, E3, X1>
1508
+ readonly onFailure: (e: NoInfer<E>) => Effect.Effect<X, E2, R2>
1509
+ readonly onSuccess: (a: NoInfer<A>) => Effect.Effect<X1, E3, R3>
1475
1510
  }
1476
- ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | R3, E | E2 | E3, A>,
1477
- <R, E, A, XE extends E, XA extends A, R2, E2, X, R3, E3, X1>(
1478
- self: Effect.Effect<R, E, A>,
1511
+ ) => <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2 | E3, R | R2 | R3>,
1512
+ <A, E, R, X, E2, R2, X1, E3, R3>(
1513
+ self: Effect.Effect<A, E, R>,
1479
1514
  options: {
1480
- readonly onFailure: (e: XE) => Effect.Effect<R2, E2, X>
1481
- readonly onSuccess: (a: XA) => Effect.Effect<R3, E3, X1>
1515
+ readonly onFailure: (e: E) => Effect.Effect<X, E2, R2>
1516
+ readonly onSuccess: (a: A) => Effect.Effect<X1, E3, R3>
1482
1517
  }
1483
- ) => Effect.Effect<R | R2 | R3, E | E2 | E3, A>
1518
+ ) => Effect.Effect<A, E | E2 | E3, R | R2 | R3>
1484
1519
  >(2, (self, { onFailure, onSuccess }) =>
1485
1520
  core.matchCauseEffect(self, {
1486
1521
  onFailure: (cause) => {
@@ -1499,13 +1534,13 @@ export const tapBoth = dual<
1499
1534
 
1500
1535
  /* @internal */
1501
1536
  export const tapDefect = dual<
1502
- <R2, E2, X>(
1503
- f: (cause: Cause.Cause<never>) => Effect.Effect<R2, E2, X>
1504
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1505
- <R, E, A, R2, E2, X>(
1506
- self: Effect.Effect<R, E, A>,
1507
- f: (cause: Cause.Cause<never>) => Effect.Effect<R2, E2, X>
1508
- ) => Effect.Effect<R | R2, E | E2, A>
1537
+ <X, E2, R2>(
1538
+ f: (cause: Cause.Cause<never>) => Effect.Effect<X, E2, R2>
1539
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>,
1540
+ <A, E, R, X, E2, R2>(
1541
+ self: Effect.Effect<A, E, R>,
1542
+ f: (cause: Cause.Cause<never>) => Effect.Effect<X, E2, R2>
1543
+ ) => Effect.Effect<A, E | E2, R | R2>
1509
1544
  >(2, (self, f) =>
1510
1545
  core.catchAllCause(self, (cause) =>
1511
1546
  Option.match(internalCause.keepDefects(cause), {
@@ -1515,24 +1550,22 @@ export const tapDefect = dual<
1515
1550
 
1516
1551
  /* @internal */
1517
1552
  export const tapError = dual<
1518
- <E, XE extends E, R2, E2, X>(
1519
- f: (e: XE) => Effect.Effect<R2, E2, X>
1520
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1521
- <R, E, XE extends E, A, R2, E2, X>(
1522
- self: Effect.Effect<R, E, A>,
1523
- f: (e: XE) => Effect.Effect<R2, E2, X>
1524
- ) => Effect.Effect<R | R2, E | E2, A>
1553
+ <E, X, E2, R2>(
1554
+ f: (e: NoInfer<E>) => Effect.Effect<X, E2, R2>
1555
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>,
1556
+ <A, E, R, X, E2, R2>(
1557
+ self: Effect.Effect<A, E, R>,
1558
+ f: (e: E) => Effect.Effect<X, E2, R2>
1559
+ ) => Effect.Effect<A, E | E2, R | R2>
1525
1560
  >(2, (self, f) =>
1526
1561
  core.matchCauseEffect(self, {
1527
1562
  onFailure: (cause) => {
1528
1563
  const either = internalCause.failureOrCause(cause)
1529
1564
  switch (either._tag) {
1530
- case "Left": {
1565
+ case "Left":
1531
1566
  return core.zipRight(f(either.left as any), core.failCause(cause))
1532
- }
1533
- case "Right": {
1567
+ case "Right":
1534
1568
  return core.failCause(cause)
1535
- }
1536
1569
  }
1537
1570
  },
1538
1571
  onSuccess: core.succeed
@@ -1540,15 +1573,15 @@ export const tapError = dual<
1540
1573
 
1541
1574
  /* @internal */
1542
1575
  export const tapErrorTag = dual<
1543
- <K extends (E extends { _tag: string } ? E["_tag"] : never), E, R1, E1, A1>(
1576
+ <K extends (E extends { _tag: string } ? E["_tag"] : never), E, A1, E1, R1>(
1544
1577
  k: K,
1545
- f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
1546
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, E | E1, A>,
1547
- <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
1548
- self: Effect.Effect<R, E, A>,
1578
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
1579
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E1, R | R1>,
1580
+ <A, E, R, K extends (E extends { _tag: string } ? E["_tag"] : never), A1, E1, R1>(
1581
+ self: Effect.Effect<A, E, R>,
1549
1582
  k: K,
1550
- f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
1551
- ) => Effect.Effect<R | R1, E | E1, A>
1583
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
1584
+ ) => Effect.Effect<A, E | E1, R | R1>
1552
1585
  >(3, (self, k, f) =>
1553
1586
  tapError(self, (e) => {
1554
1587
  if (Predicate.isTagged(e, k)) {
@@ -1559,44 +1592,44 @@ export const tapErrorTag = dual<
1559
1592
 
1560
1593
  /* @internal */
1561
1594
  export const tapErrorCause = dual<
1562
- <E, XE extends E, R2, E2, X>(
1563
- f: (cause: Cause.Cause<XE>) => Effect.Effect<R2, E2, X>
1564
- ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1565
- <R, E, A, XE extends E, R2, E2, X>(
1566
- self: Effect.Effect<R, E, A>,
1567
- f: (cause: Cause.Cause<XE>) => Effect.Effect<R2, E2, X>
1568
- ) => Effect.Effect<R | R2, E | E2, A>
1595
+ <E, X, E2, R2>(
1596
+ f: (cause: Cause.Cause<NoInfer<E>>) => Effect.Effect<X, E2, R2>
1597
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>,
1598
+ <A, E, R, X, E2, R2>(
1599
+ self: Effect.Effect<A, E, R>,
1600
+ f: (cause: Cause.Cause<E>) => Effect.Effect<X, E2, R2>
1601
+ ) => Effect.Effect<A, E | E2, R | R2>
1569
1602
  >(2, (self, f) =>
1570
1603
  core.matchCauseEffect(self, {
1571
- onFailure: (cause) => core.zipRight(f(cause as any), core.failCause(cause)),
1604
+ onFailure: (cause) => core.zipRight(f(cause), core.failCause(cause)),
1572
1605
  onSuccess: core.succeed
1573
1606
  }))
1574
1607
 
1575
1608
  /* @internal */
1576
- export const timed = <R, E, A>(
1577
- self: Effect.Effect<R, E, A>
1578
- ): Effect.Effect<R, E, [Duration.Duration, A]> => timedWith(self, Clock.currentTimeNanos)
1609
+ export const timed = <A, E, R>(
1610
+ self: Effect.Effect<A, E, R>
1611
+ ): Effect.Effect<[Duration.Duration, A], E, R> => timedWith(self, Clock.currentTimeNanos)
1579
1612
 
1580
1613
  /* @internal */
1581
1614
  export const timedWith = dual<
1582
- <R1, E1>(
1583
- nanoseconds: Effect.Effect<R1, E1, bigint>
1584
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, E | E1, [Duration.Duration, A]>,
1585
- <R, E, A, R1, E1>(
1586
- self: Effect.Effect<R, E, A>,
1587
- nanoseconds: Effect.Effect<R1, E1, bigint>
1588
- ) => Effect.Effect<R | R1, E | E1, [Duration.Duration, A]>
1615
+ <E1, R1>(
1616
+ nanoseconds: Effect.Effect<bigint, E1, R1>
1617
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<[Duration.Duration, A], E | E1, R | R1>,
1618
+ <A, E, R, E1, R1>(
1619
+ self: Effect.Effect<A, E, R>,
1620
+ nanoseconds: Effect.Effect<bigint, E1, R1>
1621
+ ) => Effect.Effect<[Duration.Duration, A], E | E1, R | R1>
1589
1622
  >(
1590
1623
  2,
1591
1624
  (self, nanos) => summarized(self, nanos, (start, end) => Duration.nanos(end - start))
1592
1625
  )
1593
1626
 
1594
1627
  /* @internal */
1595
- export const tracerWith: <R, E, A>(f: (tracer: Tracer.Tracer) => Effect.Effect<R, E, A>) => Effect.Effect<R, E, A> =
1628
+ export const tracerWith: <A, E, R>(f: (tracer: Tracer.Tracer) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, R> =
1596
1629
  Tracer.tracerWith
1597
1630
 
1598
1631
  /** @internal */
1599
- export const tracer: Effect.Effect<never, never, Tracer.Tracer> = tracerWith(core.succeed)
1632
+ export const tracer: Effect.Effect<Tracer.Tracer> = tracerWith(core.succeed)
1600
1633
 
1601
1634
  /* @internal */
1602
1635
  export const tryPromise: {
@@ -1605,14 +1638,14 @@ export const tryPromise: {
1605
1638
  readonly try: (signal: AbortSignal) => Promise<A>
1606
1639
  readonly catch: (error: unknown) => E
1607
1640
  }
1608
- ): Effect.Effect<never, E, A>
1609
- <A>(try_: (signal: AbortSignal) => Promise<A>): Effect.Effect<never, Cause.UnknownException, A>
1641
+ ): Effect.Effect<A, E>
1642
+ <A>(try_: (signal: AbortSignal) => Promise<A>): Effect.Effect<A, Cause.UnknownException>
1610
1643
  } = <A, E>(
1611
1644
  arg: ((signal: AbortSignal) => Promise<A>) | {
1612
1645
  readonly try: (signal: AbortSignal) => Promise<A>
1613
1646
  readonly catch: (error: unknown) => E
1614
1647
  }
1615
- ): Effect.Effect<never, E | Cause.UnknownException, A> => {
1648
+ ): Effect.Effect<A, E | Cause.UnknownException> => {
1616
1649
  let evaluate: (signal?: AbortSignal) => Promise<A>
1617
1650
  let catcher: ((error: unknown) => E) | undefined = undefined
1618
1651
  if (typeof arg === "function") {
@@ -1664,14 +1697,14 @@ export const tryMap = dual<
1664
1697
  readonly try: (a: A) => B
1665
1698
  readonly catch: (error: unknown) => E1
1666
1699
  }
1667
- ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E1, B>,
1668
- <R, E, A, B, E1>(
1669
- self: Effect.Effect<R, E, A>,
1700
+ ) => <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E | E1, R>,
1701
+ <A, E, R, B, E1>(
1702
+ self: Effect.Effect<A, E, R>,
1670
1703
  options: {
1671
1704
  readonly try: (a: A) => B
1672
1705
  readonly catch: (error: unknown) => E1
1673
1706
  }
1674
- ) => Effect.Effect<R, E | E1, B>
1707
+ ) => Effect.Effect<B, E | E1, R>
1675
1708
  >(2, (self, options) =>
1676
1709
  core.flatMap(self, (a) =>
1677
1710
  try_({
@@ -1686,21 +1719,21 @@ export const tryMapPromise = dual<
1686
1719
  readonly try: (a: A, signal: AbortSignal) => Promise<B>
1687
1720
  readonly catch: (error: unknown) => E1
1688
1721
  }
1689
- ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E1, B>,
1690
- <R, E, A, B, E1>(
1691
- self: Effect.Effect<R, E, A>,
1722
+ ) => <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E | E1, R>,
1723
+ <A, E, R, B, E1>(
1724
+ self: Effect.Effect<A, E, R>,
1692
1725
  options: {
1693
1726
  readonly try: (a: A, signal: AbortSignal) => Promise<B>
1694
1727
  readonly catch: (error: unknown) => E1
1695
1728
  }
1696
- ) => Effect.Effect<R, E | E1, B>
1697
- >(2, <R, E, A, B, E1>(
1698
- self: Effect.Effect<R, E, A>,
1729
+ ) => Effect.Effect<B, E | E1, R>
1730
+ >(2, <A, E, R, B, E1>(
1731
+ self: Effect.Effect<A, E, R>,
1699
1732
  options: {
1700
1733
  readonly try: (a: A, signal: AbortSignal) => Promise<B>
1701
1734
  readonly catch: (error: unknown) => E1
1702
1735
  }
1703
- ): Effect.Effect<R, E | E1, B> =>
1736
+ ) =>
1704
1737
  core.flatMap(self, (a) =>
1705
1738
  tryPromise({
1706
1739
  try: options.try.length >= 1
@@ -1711,8 +1744,8 @@ export const tryMapPromise = dual<
1711
1744
 
1712
1745
  /* @internal */
1713
1746
  export const unless = dual<
1714
- (condition: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1715
- <R, E, A>(self: Effect.Effect<R, E, A>, condition: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1747
+ (condition: LazyArg<boolean>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Option.Option<A>, E, R>,
1748
+ <A, E, R>(self: Effect.Effect<A, E, R>, condition: LazyArg<boolean>) => Effect.Effect<Option.Option<A>, E, R>
1716
1749
  >(2, (self, condition) =>
1717
1750
  core.suspend(() =>
1718
1751
  condition()
@@ -1722,24 +1755,24 @@ export const unless = dual<
1722
1755
 
1723
1756
  /* @internal */
1724
1757
  export const unlessEffect = dual<
1725
- <R2, E2>(
1726
- condition: Effect.Effect<R2, E2, boolean>
1727
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, Option.Option<A>>,
1728
- <R, E, A, R2, E2>(
1729
- self: Effect.Effect<R, E, A>,
1730
- condition: Effect.Effect<R2, E2, boolean>
1731
- ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>
1758
+ <E2, R2>(
1759
+ condition: Effect.Effect<boolean, E2, R2>
1760
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Option.Option<A>, E | E2, R | R2>,
1761
+ <A, E, R, E2, R2>(
1762
+ self: Effect.Effect<A, E, R>,
1763
+ condition: Effect.Effect<boolean, E2, R2>
1764
+ ) => Effect.Effect<Option.Option<A>, E | E2, R | R2>
1732
1765
  >(2, (self, condition) => core.flatMap(condition, (b) => (b ? succeedNone : asSome(self))))
1733
1766
 
1734
1767
  /* @internal */
1735
- export const unsandbox = <R, E, A>(self: Effect.Effect<R, Cause.Cause<E>, A>) =>
1768
+ export const unsandbox = <A, E, R>(self: Effect.Effect<A, Cause.Cause<E>, R>) =>
1736
1769
  mapErrorCause(self, internalCause.flatten)
1737
1770
 
1738
1771
  /* @internal */
1739
1772
  export const updateFiberRefs = (
1740
1773
  f: (fiberId: FiberId.Runtime, fiberRefs: FiberRefs.FiberRefs) => FiberRefs.FiberRefs
1741
- ): Effect.Effect<never, never, void> =>
1742
- core.withFiberRuntime<never, never, void>((state) => {
1774
+ ): Effect.Effect<void> =>
1775
+ core.withFiberRuntime((state) => {
1743
1776
  state.setFiberRefs(f(state.id(), state.getFiberRefs()))
1744
1777
  return core.unit
1745
1778
  })
@@ -1749,14 +1782,14 @@ export const updateService = dual<
1749
1782
  <T extends Context.Tag<any, any>>(
1750
1783
  tag: T,
1751
1784
  f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1752
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | Context.Tag.Identifier<T>, E, A>,
1753
- <R, E, A, T extends Context.Tag<any, any>>(
1754
- self: Effect.Effect<R, E, A>,
1785
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R | Context.Tag.Identifier<T>>,
1786
+ <A, E, R, T extends Context.Tag<any, any>>(
1787
+ self: Effect.Effect<A, E, R>,
1755
1788
  tag: T,
1756
1789
  f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1757
- ) => Effect.Effect<R | Context.Tag.Identifier<T>, E, A>
1758
- >(3, <R, E, A, T extends Context.Tag<any, any>>(
1759
- self: Effect.Effect<R, E, A>,
1790
+ ) => Effect.Effect<A, E, R | Context.Tag.Identifier<T>>
1791
+ >(3, <A, E, R, T extends Context.Tag<any, any>>(
1792
+ self: Effect.Effect<A, E, R>,
1760
1793
  tag: T,
1761
1794
  f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1762
1795
  ) =>
@@ -1765,12 +1798,12 @@ export const updateService = dual<
1765
1798
  context,
1766
1799
  tag,
1767
1800
  f(Context.unsafeGet(context, tag))
1768
- )) as Effect.Effect<R | Context.Tag.Identifier<T>, E, A>)
1801
+ )) as Effect.Effect<A, E, R | Context.Tag.Identifier<T>>)
1769
1802
 
1770
1803
  /* @internal */
1771
1804
  export const when = dual<
1772
- (condition: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1773
- <R, E, A>(self: Effect.Effect<R, E, A>, condition: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1805
+ (condition: LazyArg<boolean>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Option.Option<A>, E, R>,
1806
+ <A, E, R>(self: Effect.Effect<A, E, R>, condition: LazyArg<boolean>) => Effect.Effect<Option.Option<A>, E, R>
1774
1807
  >(2, (self, condition) =>
1775
1808
  core.suspend(() =>
1776
1809
  condition()
@@ -1783,15 +1816,19 @@ export const whenFiberRef = dual<
1783
1816
  <S>(
1784
1817
  fiberRef: FiberRef.FiberRef<S>,
1785
1818
  predicate: Predicate.Predicate<S>
1786
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, [S, Option.Option<A>]>,
1787
- <R, E, A, S>(
1788
- self: Effect.Effect<R, E, A>,
1819
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<[S, Option.Option<A>], E, R>,
1820
+ <A, E, R, S>(
1821
+ self: Effect.Effect<A, E, R>,
1789
1822
  fiberRef: FiberRef.FiberRef<S>,
1790
1823
  predicate: Predicate.Predicate<S>
1791
- ) => Effect.Effect<R, E, [S, Option.Option<A>]>
1824
+ ) => Effect.Effect<[S, Option.Option<A>], E, R>
1792
1825
  >(
1793
1826
  3,
1794
- <R, E, A, S>(self: Effect.Effect<R, E, A>, fiberRef: FiberRef.FiberRef<S>, predicate: Predicate.Predicate<S>) =>
1827
+ <A, E, R, S>(
1828
+ self: Effect.Effect<A, E, R>,
1829
+ fiberRef: FiberRef.FiberRef<S>,
1830
+ predicate: Predicate.Predicate<S>
1831
+ ) =>
1795
1832
  core.flatMap(core.fiberRefGet(fiberRef), (s) =>
1796
1833
  predicate(s)
1797
1834
  ? core.map(self, (a) => [s, Option.some(a)])
@@ -1803,15 +1840,15 @@ export const whenRef = dual<
1803
1840
  <S>(
1804
1841
  ref: Ref.Ref<S>,
1805
1842
  predicate: Predicate.Predicate<S>
1806
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, [S, Option.Option<A>]>,
1807
- <R, E, A, S>(
1808
- self: Effect.Effect<R, E, A>,
1843
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<[S, Option.Option<A>], E, R>,
1844
+ <A, E, R, S>(
1845
+ self: Effect.Effect<A, E, R>,
1809
1846
  ref: Ref.Ref<S>,
1810
1847
  predicate: Predicate.Predicate<S>
1811
- ) => Effect.Effect<R, E, [S, Option.Option<A>]>
1848
+ ) => Effect.Effect<[S, Option.Option<A>], E, R>
1812
1849
  >(
1813
1850
  3,
1814
- <R, E, A, S>(self: Effect.Effect<R, E, A>, ref: Ref.Ref<S>, predicate: Predicate.Predicate<S>) =>
1851
+ <A, E, R, S>(self: Effect.Effect<A, E, R>, ref: Ref.Ref<S>, predicate: Predicate.Predicate<S>) =>
1815
1852
  core.flatMap(Ref.get(ref), (s) =>
1816
1853
  predicate(s)
1817
1854
  ? core.map(self, (a) => [s, Option.some(a)])
@@ -1822,19 +1859,19 @@ export const whenRef = dual<
1822
1859
  export const withMetric = dual<
1823
1860
  <Type, In, Out>(
1824
1861
  metric: Metric.Metric<Type, In, Out>
1825
- ) => <R, E, A extends In>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1826
- <R, E, A extends In, Type, In, Out>(
1827
- self: Effect.Effect<R, E, A>,
1862
+ ) => <A extends In, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1863
+ <A extends In, E, R, Type, In, Out>(
1864
+ self: Effect.Effect<A, E, R>,
1828
1865
  metric: Metric.Metric<Type, In, Out>
1829
- ) => Effect.Effect<R, E, A>
1866
+ ) => Effect.Effect<A, E, R>
1830
1867
  >(2, (self, metric) => metric(self))
1831
1868
 
1832
1869
  /** @internal */
1833
1870
  export const serviceFunctionEffect = <T extends Effect.Effect<any, any, any>, Args extends Array<any>, R, E, A>(
1834
1871
  getService: T,
1835
- f: (_: Effect.Effect.Success<T>) => (...args: Args) => Effect.Effect<R, E, A>
1872
+ f: (_: Effect.Effect.Success<T>) => (...args: Args) => Effect.Effect<A, E, R>
1836
1873
  ) =>
1837
- (...args: Args): Effect.Effect<R | Effect.Effect.Context<T>, E | Effect.Effect.Error<T>, A> =>
1874
+ (...args: Args): Effect.Effect<A, E | Effect.Effect.Error<T>, R | Effect.Effect.Context<T>> =>
1838
1875
  core.flatMap(getService, (a) => f(a)(...args))
1839
1876
 
1840
1877
  /** @internal */
@@ -1842,16 +1879,16 @@ export const serviceFunction = <T extends Effect.Effect<any, any, any>, Args ext
1842
1879
  getService: T,
1843
1880
  f: (_: Effect.Effect.Success<T>) => (...args: Args) => A
1844
1881
  ) =>
1845
- (...args: Args): Effect.Effect<Effect.Effect.Context<T>, Effect.Effect.Error<T>, A> =>
1882
+ (...args: Args): Effect.Effect<A, Effect.Effect.Error<T>, Effect.Effect.Context<T>> =>
1846
1883
  core.map(getService, (a) => f(a)(...args))
1847
1884
 
1848
1885
  /** @internal */
1849
- export const serviceFunctions = <SR, SE, S>(
1850
- getService: Effect.Effect<SR, SE, S>
1886
+ export const serviceFunctions = <S, SE, SR>(
1887
+ getService: Effect.Effect<S, SE, SR>
1851
1888
  ): {
1852
1889
  [k in { [k in keyof S]: S[k] extends (...args: Array<any>) => Effect.Effect<any, any, any> ? k : never }[keyof S]]:
1853
- S[k] extends (...args: infer Args) => Effect.Effect<infer R, infer E, infer A>
1854
- ? (...args: Args) => Effect.Effect<R | SR, E | SE, A>
1890
+ S[k] extends (...args: infer Args) => Effect.Effect<infer A, infer E, infer R>
1891
+ ? (...args: Args) => Effect.Effect<A, E | SE, R | SR>
1855
1892
  : never
1856
1893
  } =>
1857
1894
  new Proxy({} as any, {
@@ -1861,29 +1898,31 @@ export const serviceFunctions = <SR, SE, S>(
1861
1898
  })
1862
1899
 
1863
1900
  /** @internal */
1864
- export const serviceConstants = <SR, SE, S>(
1865
- getService: Effect.Effect<SR, SE, S>
1901
+ export const serviceConstants = <S, SE, SR>(
1902
+ getService: Effect.Effect<S, SE, SR>
1866
1903
  ): {
1867
- [k in { [k in keyof S]: S[k] extends Effect.Effect<any, any, any> ? k : never }[keyof S]]: S[k] extends
1868
- Effect.Effect<infer R, infer E, infer A> ? Effect.Effect<R | SR, E | SE, A> : never
1904
+ [k in { [k in keyof S]: k }[keyof S]]: S[k] extends Effect.Effect<infer A, infer E, infer R> ?
1905
+ Effect.Effect<A, E | SE, R | SR> :
1906
+ Effect.Effect<S[k], SE, SR>
1869
1907
  } =>
1870
1908
  new Proxy({} as any, {
1871
1909
  get(_target: any, prop: any, _receiver) {
1872
- return core.flatMap(getService, (s: any) => s[prop])
1910
+ return core.flatMap(getService, (s: any) => core.isEffect(s[prop]) ? s[prop] : core.succeed(s[prop]))
1873
1911
  }
1874
1912
  })
1875
1913
 
1876
1914
  /** @internal */
1877
- export const serviceMembers = <SR, SE, S>(getService: Effect.Effect<SR, SE, S>): {
1915
+ export const serviceMembers = <S, SE, SR>(getService: Effect.Effect<S, SE, SR>): {
1878
1916
  functions: {
1879
1917
  [k in { [k in keyof S]: S[k] extends (...args: Array<any>) => Effect.Effect<any, any, any> ? k : never }[keyof S]]:
1880
- S[k] extends (...args: infer Args) => Effect.Effect<infer R, infer E, infer A>
1881
- ? (...args: Args) => Effect.Effect<R | SR, E | SE, A>
1918
+ S[k] extends (...args: infer Args) => Effect.Effect<infer A, infer E, infer R>
1919
+ ? (...args: Args) => Effect.Effect<A, E | SE, R | SR>
1882
1920
  : never
1883
1921
  }
1884
1922
  constants: {
1885
- [k in { [k in keyof S]: S[k] extends Effect.Effect<any, any, any> ? k : never }[keyof S]]: S[k] extends
1886
- Effect.Effect<infer R, infer E, infer A> ? Effect.Effect<R | SR, E | SE, A> : never
1923
+ [k in { [k in keyof S]: k }[keyof S]]: S[k] extends Effect.Effect<infer A, infer E, infer R> ?
1924
+ Effect.Effect<A, E | SE, R | SR> :
1925
+ Effect.Effect<S[k], SE, SR>
1887
1926
  }
1888
1927
  } => ({
1889
1928
  functions: serviceFunctions(getService),
@@ -1903,9 +1942,9 @@ export const serviceOptional = <I, S>(tag: Context.Tag<I, S>) =>
1903
1942
 
1904
1943
  /* @internal */
1905
1944
  export const annotateCurrentSpan: {
1906
- (key: string, value: unknown): Effect.Effect<never, never, void>
1907
- (values: Record<string, unknown>): Effect.Effect<never, never, void>
1908
- } = function(): Effect.Effect<never, never, void> {
1945
+ (key: string, value: unknown): Effect.Effect<void>
1946
+ (values: Record<string, unknown>): Effect.Effect<void>
1947
+ } = function(): Effect.Effect<void> {
1909
1948
  const args = arguments
1910
1949
  return ignore(core.flatMap(
1911
1950
  currentSpan,
@@ -1925,21 +1964,21 @@ export const annotateCurrentSpan: {
1925
1964
  /* @internal */
1926
1965
  export const annotateSpans = dual<
1927
1966
  {
1928
- (key: string, value: unknown): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1967
+ (key: string, value: unknown): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
1929
1968
  (
1930
1969
  values: Record<string, unknown>
1931
- ): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1970
+ ): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
1932
1971
  },
1933
1972
  {
1934
- <R, E, A>(effect: Effect.Effect<R, E, A>, key: string, value: unknown): Effect.Effect<R, E, A>
1935
- <R, E, A>(effect: Effect.Effect<R, E, A>, values: Record<string, unknown>): Effect.Effect<R, E, A>
1973
+ <A, E, R>(effect: Effect.Effect<A, E, R>, key: string, value: unknown): Effect.Effect<A, E, R>
1974
+ <A, E, R>(effect: Effect.Effect<A, E, R>, values: Record<string, unknown>): Effect.Effect<A, E, R>
1936
1975
  }
1937
1976
  >(
1938
1977
  (args) => core.isEffect(args[0]),
1939
- function<R, E, A>() {
1978
+ function<A, E, R>() {
1940
1979
  const args = arguments
1941
1980
  return core.fiberRefLocallyWith(
1942
- args[0] as Effect.Effect<R, E, A>,
1981
+ args[0] as Effect.Effect<A, E, R>,
1943
1982
  core.currentTracerSpanAnnotations,
1944
1983
  typeof args[1] === "string"
1945
1984
  ? HashMap.set(args[1], args[2])
@@ -1953,15 +1992,15 @@ export const annotateSpans = dual<
1953
1992
  )
1954
1993
 
1955
1994
  /** @internal */
1956
- export const currentParentSpan: Effect.Effect<never, Cause.NoSuchElementException, Tracer.ParentSpan> = serviceOptional(
1995
+ export const currentParentSpan: Effect.Effect<Tracer.ParentSpan, Cause.NoSuchElementException> = serviceOptional(
1957
1996
  internalTracer.spanTag
1958
1997
  )
1959
1998
 
1960
1999
  /** @internal */
1961
- export const currentSpan: Effect.Effect<never, Cause.NoSuchElementException, Tracer.Span> = core.flatMap(
2000
+ export const currentSpan: Effect.Effect<Tracer.Span, Cause.NoSuchElementException> = core.flatMap(
1962
2001
  core.context<never>(),
1963
2002
  (context) => {
1964
- const span = context.unsafeMap.get(internalTracer.spanTag) as Tracer.ParentSpan | undefined
2003
+ const span = context.unsafeMap.get(internalTracer.spanTag.key) as Tracer.ParentSpan | undefined
1965
2004
  return span !== undefined && span._tag === "Span"
1966
2005
  ? core.succeed(span)
1967
2006
  : core.fail(new core.NoSuchElementException())
@@ -1980,12 +2019,12 @@ export const linkSpans = dual<
1980
2019
  (
1981
2020
  span: Tracer.ParentSpan,
1982
2021
  attributes?: Record<string, unknown>
1983
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1984
- <R, E, A>(
1985
- self: Effect.Effect<R, E, A>,
2022
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
2023
+ <A, E, R>(
2024
+ self: Effect.Effect<A, E, R>,
1986
2025
  span: Tracer.ParentSpan,
1987
2026
  attributes?: Record<string, unknown>
1988
- ) => Effect.Effect<R, E, A>
2027
+ ) => Effect.Effect<A, E, R>
1989
2028
  >(
1990
2029
  (args) => core.isEffect(args[0]),
1991
2030
  (self, span, attributes) =>
@@ -2012,7 +2051,7 @@ export const makeSpan = (
2012
2051
  readonly root?: boolean | undefined
2013
2052
  readonly context?: Context.Context<never> | undefined
2014
2053
  }
2015
- ) =>
2054
+ ): Effect.Effect<Tracer.Span> =>
2016
2055
  core.flatMap(fiberRefs, (fiberRefs) =>
2017
2056
  core.sync(() => {
2018
2057
  const context = FiberRefs.getOrDefault(fiberRefs, core.currentContext)
@@ -2034,7 +2073,7 @@ export const makeSpan = (
2034
2073
  options?.links !== undefined ?
2035
2074
  [
2036
2075
  ...Chunk.toReadonlyArray(linksFromEnv.value),
2037
- ...options?.links ?? []
2076
+ ...(options?.links ?? [])
2038
2077
  ] :
2039
2078
  Chunk.toReadonlyArray(linksFromEnv.value) :
2040
2079
  options?.links ?? ReadonlyArray.empty()
@@ -2058,28 +2097,28 @@ export const makeSpan = (
2058
2097
  }))
2059
2098
 
2060
2099
  /* @internal */
2061
- export const spanAnnotations: Effect.Effect<never, never, HashMap.HashMap<string, unknown>> = core
2100
+ export const spanAnnotations: Effect.Effect<HashMap.HashMap<string, unknown>> = core
2062
2101
  .fiberRefGet(core.currentTracerSpanAnnotations)
2063
2102
 
2064
2103
  /* @internal */
2065
- export const spanLinks: Effect.Effect<never, never, Chunk.Chunk<Tracer.SpanLink>> = core
2104
+ export const spanLinks: Effect.Effect<Chunk.Chunk<Tracer.SpanLink>> = core
2066
2105
  .fiberRefGet(core.currentTracerSpanLinks)
2067
2106
 
2068
2107
  /** @internal */
2069
2108
  export const useSpan: {
2070
- <R, E, A>(name: string, evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>): Effect.Effect<R, E, A>
2071
- <R, E, A>(name: string, options: {
2109
+ <A, E, R>(name: string, evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R>
2110
+ <A, E, R>(name: string, options: {
2072
2111
  readonly attributes?: Record<string, unknown> | undefined
2073
2112
  readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2074
2113
  readonly parent?: Tracer.ParentSpan | undefined
2075
2114
  readonly root?: boolean | undefined
2076
2115
  readonly context?: Context.Context<never> | undefined
2077
- }, evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>): Effect.Effect<R, E, A>
2078
- } = <R, E, A>(
2116
+ }, evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R>
2117
+ } = <A, E, R>(
2079
2118
  name: string,
2080
- ...args: [evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>] | [
2119
+ ...args: [evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>] | [
2081
2120
  options: any,
2082
- evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>
2121
+ evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>
2083
2122
  ]
2084
2123
  ) => {
2085
2124
  const options: {
@@ -2089,7 +2128,7 @@ export const useSpan: {
2089
2128
  readonly root?: boolean | undefined
2090
2129
  readonly context?: Context.Context<never> | undefined
2091
2130
  } | undefined = args.length === 1 ? undefined : args[0]
2092
- const evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A> = args[args.length - 1]
2131
+ const evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R> = args[args.length - 1]
2093
2132
 
2094
2133
  return core.acquireUseRelease(
2095
2134
  makeSpan(name, options),
@@ -2106,8 +2145,8 @@ export const useSpan: {
2106
2145
  export const withParentSpan = dual<
2107
2146
  (
2108
2147
  span: Tracer.ParentSpan
2109
- ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Tracer.ParentSpan>, E, A>,
2110
- <R, E, A>(self: Effect.Effect<R, E, A>, span: Tracer.ParentSpan) => Effect.Effect<Exclude<R, Tracer.ParentSpan>, E, A>
2148
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>,
2149
+ <A, E, R>(self: Effect.Effect<A, E, R>, span: Tracer.ParentSpan) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>
2111
2150
  >(2, (self, span) => provideService(self, internalTracer.spanTag, span))
2112
2151
 
2113
2152
  /** @internal */
@@ -2118,14 +2157,14 @@ export const withSpan = dual<
2118
2157
  readonly parent?: Tracer.ParentSpan | undefined
2119
2158
  readonly root?: boolean | undefined
2120
2159
  readonly context?: Context.Context<never> | undefined
2121
- }) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Tracer.ParentSpan>, E, A>,
2122
- <R, E, A>(self: Effect.Effect<R, E, A>, name: string, options?: {
2160
+ }) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>,
2161
+ <A, E, R>(self: Effect.Effect<A, E, R>, name: string, options?: {
2123
2162
  readonly attributes?: Record<string, unknown> | undefined
2124
2163
  readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2125
2164
  readonly parent?: Tracer.ParentSpan | undefined
2126
2165
  readonly root?: boolean | undefined
2127
2166
  readonly context?: Context.Context<never> | undefined
2128
- }) => Effect.Effect<Exclude<R, Tracer.ParentSpan>, E, A>
2167
+ }) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>
2129
2168
  >(
2130
2169
  (args) => typeof args[0] !== "string",
2131
2170
  (self, name, options) =>
@@ -2141,13 +2180,13 @@ export const withSpan = dual<
2141
2180
  // -------------------------------------------------------------------------------------
2142
2181
 
2143
2182
  /* @internal */
2144
- export const fromNullable = <A>(value: A): Effect.Effect<never, Cause.NoSuchElementException, NonNullable<A>> =>
2183
+ export const fromNullable = <A>(value: A): Effect.Effect<NonNullable<A>, Cause.NoSuchElementException> =>
2145
2184
  value == null ? core.fail(new core.NoSuchElementException()) : core.succeed(value as NonNullable<A>)
2146
2185
 
2147
2186
  /* @internal */
2148
- export const optionFromOptional = <R, E, A>(
2149
- self: Effect.Effect<R, E, A>
2150
- ): Effect.Effect<R, Exclude<E, Cause.NoSuchElementException>, Option.Option<A>> =>
2187
+ export const optionFromOptional = <A, E, R>(
2188
+ self: Effect.Effect<A, E, R>
2189
+ ): Effect.Effect<Option.Option<A>, Exclude<E, Cause.NoSuchElementException>, R> =>
2151
2190
  core.catchAll(
2152
2191
  core.map(self, Option.some),
2153
2192
  (error) =>