effect 2.2.5 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +47 -47
  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 +47 -47
  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
@@ -22,23 +22,23 @@ import * as STMState from "./stm/stmState.js"
22
22
  /** @internal */
23
23
  export const acquireUseRelease = dual<
24
24
  <A, R2, E2, A2, R3, E3, A3>(
25
- use: (resource: A) => STM.STM<R2, E2, A2>,
26
- release: (resource: A) => STM.STM<R3, E3, A3>
25
+ use: (resource: A) => STM.STM<A2, E2, R2>,
26
+ release: (resource: A) => STM.STM<A3, E3, R3>
27
27
  ) => <R, E>(
28
- acquire: STM.STM<R, E, A>
29
- ) => Effect.Effect<R | R2 | R3, E | E2 | E3, A2>,
28
+ acquire: STM.STM<A, E, R>
29
+ ) => Effect.Effect<A2, E | E2 | E3, R | R2 | R3>,
30
30
  <R, E, A, R2, E2, A2, R3, E3, A3>(
31
- acquire: STM.STM<R, E, A>,
32
- use: (resource: A) => STM.STM<R2, E2, A2>,
33
- release: (resource: A) => STM.STM<R3, E3, A3>
34
- ) => Effect.Effect<R | R2 | R3, E | E2 | E3, A2>
31
+ acquire: STM.STM<A, E, R>,
32
+ use: (resource: A) => STM.STM<A2, E2, R2>,
33
+ release: (resource: A) => STM.STM<A3, E3, R3>
34
+ ) => Effect.Effect<A2, E | E2 | E3, R | R2 | R3>
35
35
  >(3, <R, E, A, R2, E2, A2, R3, E3, A3>(
36
- acquire: STM.STM<R, E, A>,
37
- use: (resource: A) => STM.STM<R2, E2, A2>,
38
- release: (resource: A) => STM.STM<R3, E3, A3>
39
- ): Effect.Effect<R | R2 | R3, E | E2 | E3, A2> =>
36
+ acquire: STM.STM<A, E, R>,
37
+ use: (resource: A) => STM.STM<A2, E2, R2>,
38
+ release: (resource: A) => STM.STM<A3, E3, R3>
39
+ ): Effect.Effect<A2, E | E2 | E3, R | R2 | R3> =>
40
40
  Effect.uninterruptibleMask((restore) => {
41
- let state: STMState.STMState<E, A> = STMState.running
41
+ let state: STMState.STMState<A, E> = STMState.running
42
42
  return pipe(
43
43
  restore(
44
44
  core.unsafeAtomically(
@@ -85,23 +85,23 @@ export const acquireUseRelease = dual<
85
85
 
86
86
  /** @internal */
87
87
  export const as = dual<
88
- <A2>(value: A2) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R, E, A2>,
89
- <R, E, A, A2>(self: STM.STM<R, E, A>, value: A2) => STM.STM<R, E, A2>
88
+ <A2>(value: A2) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A2, E, R>,
89
+ <R, E, A, A2>(self: STM.STM<A, E, R>, value: A2) => STM.STM<A2, E, R>
90
90
  >(2, (self, value) => pipe(self, core.map(() => value)))
91
91
 
92
92
  /** @internal */
93
- export const asSome = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, E, Option.Option<A>> =>
93
+ export const asSome = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<Option.Option<A>, E, R> =>
94
94
  pipe(self, core.map(Option.some))
95
95
 
96
96
  /** @internal */
97
- export const asSomeError = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, Option.Option<E>, A> =>
97
+ export const asSomeError = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<A, Option.Option<E>, R> =>
98
98
  pipe(self, mapError(Option.some))
99
99
 
100
100
  /** @internal */
101
- export const asUnit = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, E, void> => pipe(self, core.map(constVoid))
101
+ export const asUnit = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<void, E, R> => pipe(self, core.map(constVoid))
102
102
 
103
103
  /** @internal */
104
- export const attempt = <A>(evaluate: LazyArg<A>): STM.STM<never, unknown, A> =>
104
+ export const attempt = <A>(evaluate: LazyArg<A>): STM.STM<A, unknown> =>
105
105
  suspend(() => {
106
106
  try {
107
107
  return core.succeed(evaluate())
@@ -113,25 +113,17 @@ export const attempt = <A>(evaluate: LazyArg<A>): STM.STM<never, unknown, A> =>
113
113
  export const bind = dual<
114
114
  <N extends string, K, R2, E2, A>(
115
115
  tag: Exclude<N, keyof K>,
116
- f: (_: K) => STM.STM<R2, E2, A>
117
- ) => <R, E>(self: STM.STM<R, E, K>) => STM.STM<
118
- R | R2,
119
- E | E2,
120
- Effect.MergeRecord<K, { [k in N]: A }>
121
- >,
116
+ f: (_: K) => STM.STM<A, E2, R2>
117
+ ) => <R, E>(self: STM.STM<K, E, R>) => STM.STM<Effect.MergeRecord<K, { [k in N]: A }>, E | E2, R | R2>,
122
118
  <R, E, N extends string, K, R2, E2, A>(
123
- self: STM.STM<R, E, K>,
119
+ self: STM.STM<K, E, R>,
124
120
  tag: Exclude<N, keyof K>,
125
- f: (_: K) => STM.STM<R2, E2, A>
126
- ) => STM.STM<
127
- R | R2,
128
- E | E2,
129
- Effect.MergeRecord<K, { [k in N]: A }>
130
- >
121
+ f: (_: K) => STM.STM<A, E2, R2>
122
+ ) => STM.STM<Effect.MergeRecord<K, { [k in N]: A }>, E | E2, R | R2>
131
123
  >(3, <R, E, N extends string, K, R2, E2, A>(
132
- self: STM.STM<R, E, K>,
124
+ self: STM.STM<K, E, R>,
133
125
  tag: Exclude<N, keyof K>,
134
- f: (_: K) => STM.STM<R2, E2, A>
126
+ f: (_: K) => STM.STM<A, E2, R2>
135
127
  ) =>
136
128
  core.flatMap(self, (k) =>
137
129
  core.map(
@@ -141,22 +133,22 @@ export const bind = dual<
141
133
 
142
134
  /* @internal */
143
135
  export const bindTo = dual<
144
- <N extends string>(tag: N) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<
145
- R,
136
+ <N extends string>(tag: N) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<
137
+ Record<N, A>,
146
138
  E,
147
- Record<N, A>
139
+ R
148
140
  >,
149
141
  <R, E, A, N extends string>(
150
- self: STM.STM<R, E, A>,
142
+ self: STM.STM<A, E, R>,
151
143
  tag: N
152
144
  ) => STM.STM<
153
- R,
145
+ Record<N, A>,
154
146
  E,
155
- Record<N, A>
147
+ R
156
148
  >
157
149
  >(
158
150
  2,
159
- <R, E, A, N extends string>(self: STM.STM<R, E, A>, tag: N): STM.STM<R, E, Record<N, A>> =>
151
+ <R, E, A, N extends string>(self: STM.STM<A, E, R>, tag: N): STM.STM<Record<N, A>, E, R> =>
160
152
  core.map(self, (a) => ({ [tag]: a } as Record<N, A>))
161
153
  )
162
154
 
@@ -165,21 +157,21 @@ export const let_ = dual<
165
157
  <N extends string, K, A>(
166
158
  tag: Exclude<N, keyof K>,
167
159
  f: (_: K) => A
168
- ) => <R, E>(self: STM.STM<R, E, K>) => STM.STM<
169
- R,
160
+ ) => <R, E>(self: STM.STM<K, E, R>) => STM.STM<
161
+ Effect.MergeRecord<K, { [k in N]: A }>,
170
162
  E,
171
- Effect.MergeRecord<K, { [k in N]: A }>
163
+ R
172
164
  >,
173
165
  <R, E, K, N extends string, A>(
174
- self: STM.STM<R, E, K>,
166
+ self: STM.STM<K, E, R>,
175
167
  tag: Exclude<N, keyof K>,
176
168
  f: (_: K) => A
177
169
  ) => STM.STM<
178
- R,
170
+ Effect.MergeRecord<K, { [k in N]: A }>,
179
171
  E,
180
- Effect.MergeRecord<K, { [k in N]: A }>
172
+ R
181
173
  >
182
- >(3, <R, E, K, N extends string, A>(self: STM.STM<R, E, K>, tag: Exclude<N, keyof K>, f: (_: K) => A) =>
174
+ >(3, <R, E, K, N extends string, A>(self: STM.STM<K, E, R>, tag: Exclude<N, keyof K>, f: (_: K) => A) =>
183
175
  core.map(
184
176
  self,
185
177
  (k): Effect.MergeRecord<K, { [k in N]: A }> => ({ ...k, [tag]: f(k) } as any)
@@ -188,33 +180,33 @@ export const let_ = dual<
188
180
  /** @internal */
189
181
  export const catchSome = dual<
190
182
  <E, R2, E2, A2>(
191
- pf: (error: E) => Option.Option<STM.STM<R2, E2, A2>>
183
+ pf: (error: E) => Option.Option<STM.STM<A2, E2, R2>>
192
184
  ) => <R, A>(
193
- self: STM.STM<R, E, A>
194
- ) => STM.STM<R2 | R, E | E2, A2 | A>,
185
+ self: STM.STM<A, E, R>
186
+ ) => STM.STM<A2 | A, E | E2, R2 | R>,
195
187
  <R, A, E, R2, E2, A2>(
196
- self: STM.STM<R, E, A>,
197
- pf: (error: E) => Option.Option<STM.STM<R2, E2, A2>>
198
- ) => STM.STM<R2 | R, E | E2, A2 | A>
188
+ self: STM.STM<A, E, R>,
189
+ pf: (error: E) => Option.Option<STM.STM<A2, E2, R2>>
190
+ ) => STM.STM<A2 | A, E | E2, R2 | R>
199
191
  >(2, <R, A, E, R2, E2, A2>(
200
- self: STM.STM<R, E, A>,
201
- pf: (error: E) => Option.Option<STM.STM<R2, E2, A2>>
202
- ): STM.STM<R2 | R, E | E2, A2 | A> =>
192
+ self: STM.STM<A, E, R>,
193
+ pf: (error: E) => Option.Option<STM.STM<A2, E2, R2>>
194
+ ): STM.STM<A2 | A, E | E2, R2 | R> =>
203
195
  core.catchAll(
204
196
  self,
205
- (e): STM.STM<R | R2, E | E2, A | A2> => Option.getOrElse(pf(e), () => core.fail(e))
197
+ (e): STM.STM<A | A2, E | E2, R | R2> => Option.getOrElse(pf(e), () => core.fail(e))
206
198
  ))
207
199
 
208
200
  export const catchTag = dual<
209
201
  <K extends E["_tag"] & string, E extends { _tag: string }, R1, E1, A1>(
210
202
  k: K,
211
- f: (e: Extract<E, { _tag: K }>) => STM.STM<R1, E1, A1>
212
- ) => <R, A>(self: STM.STM<R, E, A>) => STM.STM<R | R1, Exclude<E, { _tag: K }> | E1, A | A1>,
203
+ f: (e: Extract<E, { _tag: K }>) => STM.STM<A1, E1, R1>
204
+ ) => <R, A>(self: STM.STM<A, E, R>) => STM.STM<A | A1, Exclude<E, { _tag: K }> | E1, R | R1>,
213
205
  <R, E extends { _tag: string }, A, K extends E["_tag"] & string, R1, E1, A1>(
214
- self: STM.STM<R, E, A>,
206
+ self: STM.STM<A, E, R>,
215
207
  k: K,
216
- f: (e: Extract<E, { _tag: K }>) => STM.STM<R1, E1, A1>
217
- ) => STM.STM<R | R1, Exclude<E, { _tag: K }> | E1, A | A1>
208
+ f: (e: Extract<E, { _tag: K }>) => STM.STM<A1, E1, R1>
209
+ ) => STM.STM<A | A1, Exclude<E, { _tag: K }> | E1, R | R1>
218
210
  >(3, (self, k, f) =>
219
211
  core.catchAll(self, (e) => {
220
212
  if ("_tag" in e && e["_tag"] === k) {
@@ -232,18 +224,18 @@ export const catchTags: {
232
224
  }
233
225
  >(
234
226
  cases: Cases
235
- ): <R, A>(self: STM.STM<R, E, A>) => STM.STM<
236
- | R
227
+ ): <R, A>(self: STM.STM<A, E, R>) => STM.STM<
228
+ | A
237
229
  | {
238
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<infer R, any, any>) ? R : never
230
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<infer A, any, any>) ? A : never
239
231
  }[keyof Cases],
240
232
  | Exclude<E, { _tag: keyof Cases }>
241
233
  | {
242
234
  [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<any, infer E, any>) ? E : never
243
235
  }[keyof Cases],
244
- | A
236
+ | R
245
237
  | {
246
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<any, any, infer A>) ? A : never
238
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<any, any, infer R>) ? R : never
247
239
  }[keyof Cases]
248
240
  >
249
241
  <
@@ -254,20 +246,20 @@ export const catchTags: {
254
246
  [K in E["_tag"]]+?: (error: Extract<E, { _tag: K }>) => STM.STM<any, any, any>
255
247
  }
256
248
  >(
257
- self: STM.STM<R, E, A>,
249
+ self: STM.STM<A, E, R>,
258
250
  cases: Cases
259
251
  ): STM.STM<
260
- | R
252
+ | A
261
253
  | {
262
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<infer R, any, any>) ? R : never
254
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<infer A, any, any>) ? A : never
263
255
  }[keyof Cases],
264
256
  | Exclude<E, { _tag: keyof Cases }>
265
257
  | {
266
258
  [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<any, infer E, any>) ? E : never
267
259
  }[keyof Cases],
268
- | A
260
+ | R
269
261
  | {
270
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<any, any, infer A>) ? A : never
262
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => STM.STM<any, any, infer R>) ? R : never
271
263
  }[keyof Cases]
272
264
  >
273
265
  } = dual(2, (self, cases) =>
@@ -280,13 +272,12 @@ export const catchTags: {
280
272
  }))
281
273
 
282
274
  /** @internal */
283
- export const check = (predicate: LazyArg<boolean>): STM.STM<never, never, void> =>
284
- suspend(() => predicate() ? unit : core.retry)
275
+ export const check = (predicate: LazyArg<boolean>): STM.STM<void> => suspend(() => predicate() ? unit : core.retry)
285
276
 
286
277
  /** @internal */
287
278
  export const collect = dual<
288
- <A, A2>(pf: (a: A) => Option.Option<A2>) => <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A2>,
289
- <R, E, A, A2>(self: STM.STM<R, E, A>, pf: (a: A) => Option.Option<A2>) => STM.STM<R, E, A2>
279
+ <A, A2>(pf: (a: A) => Option.Option<A2>) => <R, E>(self: STM.STM<A, E, R>) => STM.STM<A2, E, R>,
280
+ <R, E, A, A2>(self: STM.STM<A, E, R>, pf: (a: A) => Option.Option<A2>) => STM.STM<A2, E, R>
290
281
  >(2, (self, pf) =>
291
282
  collectSTM(
292
283
  self,
@@ -296,14 +287,14 @@ export const collect = dual<
296
287
  /** @internal */
297
288
  export const collectSTM = dual<
298
289
  <A, R2, E2, A2>(
299
- pf: (a: A) => Option.Option<STM.STM<R2, E2, A2>>
290
+ pf: (a: A) => Option.Option<STM.STM<A2, E2, R2>>
300
291
  ) => <R, E>(
301
- self: STM.STM<R, E, A>
302
- ) => STM.STM<R2 | R, E2 | E, A2>,
292
+ self: STM.STM<A, E, R>
293
+ ) => STM.STM<A2, E2 | E, R2 | R>,
303
294
  <R, E, A, R2, E2, A2>(
304
- self: STM.STM<R, E, A>,
305
- pf: (a: A) => Option.Option<STM.STM<R2, E2, A2>>
306
- ) => STM.STM<R2 | R, E2 | E, A2>
295
+ self: STM.STM<A, E, R>,
296
+ pf: (a: A) => Option.Option<STM.STM<A2, E2, R2>>
297
+ ) => STM.STM<A2, E2 | E, R2 | R>
307
298
  >(2, (self, pf) =>
308
299
  core.matchSTM(self, {
309
300
  onFailure: core.fail,
@@ -314,41 +305,41 @@ export const collectSTM = dual<
314
305
  }))
315
306
 
316
307
  /** @internal */
317
- export const commitEither = <R, E, A>(self: STM.STM<R, E, A>): Effect.Effect<R, E, A> =>
308
+ export const commitEither = <A, E, R>(self: STM.STM<A, E, R>): Effect.Effect<A, E, R> =>
318
309
  Effect.flatten(core.commit(either(self)))
319
310
 
320
311
  /** @internal */
321
- export const cond = <E, A>(
312
+ export const cond = <A, E>(
322
313
  predicate: LazyArg<boolean>,
323
314
  error: LazyArg<E>,
324
315
  result: LazyArg<A>
325
- ): STM.STM<never, E, A> => {
316
+ ): STM.STM<A, E> => {
326
317
  return suspend(
327
318
  () => predicate() ? core.sync(result) : core.failSync(error)
328
319
  )
329
320
  }
330
321
 
331
322
  /** @internal */
332
- export const either = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, never, Either.Either<E, A>> =>
323
+ export const either = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<Either.Either<E, A>, never, R> =>
333
324
  match(self, { onFailure: Either.left, onSuccess: Either.right })
334
325
 
335
326
  /** @internal */
336
- export const eventually = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, E, A> =>
327
+ export const eventually = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<A, E, R> =>
337
328
  core.matchSTM(self, { onFailure: () => eventually(self), onSuccess: core.succeed })
338
329
 
339
330
  /** @internal */
340
331
  export const every = dual<
341
- <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, boolean>,
342
- <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, boolean>
332
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<boolean, E, R>) => (iterable: Iterable<A>) => STM.STM<boolean, E, R>,
333
+ <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<boolean, E, R>) => STM.STM<boolean, E, R>
343
334
  >(
344
335
  2,
345
336
  <A, R, E>(
346
337
  iterable: Iterable<A>,
347
- predicate: (a: A) => STM.STM<R, E, boolean>
348
- ): STM.STM<R, E, boolean> =>
338
+ predicate: (a: A) => STM.STM<boolean, E, R>
339
+ ): STM.STM<boolean, E, R> =>
349
340
  pipe(
350
341
  core.flatMap(core.sync(() => iterable[Symbol.iterator]()), (iterator) => {
351
- const loop: STM.STM<R, E, boolean> = suspend(() => {
342
+ const loop: STM.STM<boolean, E, R> = suspend(() => {
352
343
  const next = iterator.next()
353
344
  if (next.done) {
354
345
  return core.succeed(true)
@@ -365,13 +356,13 @@ export const every = dual<
365
356
 
366
357
  /** @internal */
367
358
  export const exists = dual<
368
- <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, boolean>,
369
- <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, boolean>
359
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<boolean, E, R>) => (iterable: Iterable<A>) => STM.STM<boolean, E, R>,
360
+ <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<boolean, E, R>) => STM.STM<boolean, E, R>
370
361
  >(
371
362
  2,
372
- <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>): STM.STM<R, E, boolean> =>
363
+ <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<boolean, E, R>): STM.STM<boolean, E, R> =>
373
364
  core.flatMap(core.sync(() => iterable[Symbol.iterator]()), (iterator) => {
374
- const loop: STM.STM<R, E, boolean> = suspend(() => {
365
+ const loop: STM.STM<boolean, E, R> = suspend(() => {
375
366
  const next = iterator.next()
376
367
  if (next.done) {
377
368
  return core.succeed(false)
@@ -386,17 +377,15 @@ export const exists = dual<
386
377
  )
387
378
 
388
379
  /** @internal */
389
- export const fiberId: STM.STM<never, never, FiberId.FiberId> = core.effect<never, FiberId.FiberId>((_, fiberId) =>
390
- fiberId
391
- )
380
+ export const fiberId: STM.STM<FiberId.FiberId> = core.effect<never, FiberId.FiberId>((_, fiberId) => fiberId)
392
381
 
393
382
  /** @internal */
394
383
  export const filter = dual<
395
- <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, Array<A>>,
396
- <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, Array<A>>
384
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<boolean, E, R>) => (iterable: Iterable<A>) => STM.STM<Array<A>, E, R>,
385
+ <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<boolean, E, R>) => STM.STM<Array<A>, E, R>
397
386
  >(
398
387
  2,
399
- <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>): STM.STM<R, E, Array<A>> =>
388
+ <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<boolean, E, R>): STM.STM<Array<A>, E, R> =>
400
389
  Array.from(iterable).reduce(
401
390
  (acc, curr) =>
402
391
  pipe(
@@ -409,17 +398,17 @@ export const filter = dual<
409
398
  return as
410
399
  })
411
400
  ),
412
- core.succeed([]) as STM.STM<R, E, Array<A>>
401
+ core.succeed([]) as STM.STM<Array<A>, E, R>
413
402
  )
414
403
  )
415
404
 
416
405
  /** @internal */
417
406
  export const filterNot = dual<
418
- <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<R, E, boolean>) => (iterable: Iterable<A>) => STM.STM<R, E, Array<A>>,
419
- <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>) => STM.STM<R, E, Array<A>>
407
+ <A, R, E>(predicate: (a: NoInfer<A>) => STM.STM<boolean, E, R>) => (iterable: Iterable<A>) => STM.STM<Array<A>, E, R>,
408
+ <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<boolean, E, R>) => STM.STM<Array<A>, E, R>
420
409
  >(
421
410
  2,
422
- <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<R, E, boolean>): STM.STM<R, E, Array<A>> =>
411
+ <A, R, E>(iterable: Iterable<A>, predicate: (a: A) => STM.STM<boolean, E, R>): STM.STM<Array<A>, E, R> =>
423
412
  filter(iterable, (a) => negate(predicate(a)))
424
413
  )
425
414
 
@@ -428,20 +417,20 @@ export const filterOrDie: {
428
417
  <A, B extends A>(
429
418
  refinement: Refinement<NoInfer<A>, B>,
430
419
  defect: LazyArg<unknown>
431
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
420
+ ): <R, E>(self: STM.STM<A, E, R>) => STM.STM<B, E, R>
432
421
  <A>(
433
422
  predicate: Predicate<NoInfer<A>>,
434
423
  defect: LazyArg<unknown>
435
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
424
+ ): <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E, R>
436
425
  <R, E, A, B extends A>(
437
- self: STM.STM<R, E, A>,
426
+ self: STM.STM<A, E, R>,
438
427
  refinement: Refinement<A, B>,
439
428
  defect: LazyArg<unknown>
440
- ): STM.STM<R, E, B>
441
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, defect: LazyArg<unknown>): STM.STM<R, E, A>
429
+ ): STM.STM<B, E, R>
430
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>, defect: LazyArg<unknown>): STM.STM<A, E, R>
442
431
  } = dual(
443
432
  3,
444
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, defect: LazyArg<unknown>): STM.STM<R, E, A> =>
433
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>, defect: LazyArg<unknown>): STM.STM<A, E, R> =>
445
434
  filterOrElse(self, predicate, () => core.dieSync(defect))
446
435
  )
447
436
 
@@ -450,13 +439,13 @@ export const filterOrDieMessage: {
450
439
  <A, B extends A>(
451
440
  refinement: Refinement<NoInfer<A>, B>,
452
441
  message: string
453
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
454
- <A>(predicate: Predicate<NoInfer<A>>, message: string): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
455
- <R, E, A, B extends A>(self: STM.STM<R, E, A>, refinement: Refinement<A, B>, message: string): STM.STM<R, E, B>
456
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, message: string): STM.STM<R, E, A>
442
+ ): <R, E>(self: STM.STM<A, E, R>) => STM.STM<B, E, R>
443
+ <A>(predicate: Predicate<NoInfer<A>>, message: string): <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E, R>
444
+ <R, E, A, B extends A>(self: STM.STM<A, E, R>, refinement: Refinement<A, B>, message: string): STM.STM<B, E, R>
445
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>, message: string): STM.STM<A, E, R>
457
446
  } = dual(
458
447
  3,
459
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>, message: string): STM.STM<R, E, A> =>
448
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>, message: string): STM.STM<A, E, R> =>
460
449
  filterOrElse(self, predicate, () => core.dieMessage(message))
461
450
  )
462
451
 
@@ -464,30 +453,30 @@ export const filterOrDieMessage: {
464
453
  export const filterOrElse: {
465
454
  <A, B extends A, R2, E2, C>(
466
455
  refinement: Refinement<NoInfer<A>, B>,
467
- orElse: (a: NoInfer<A>) => STM.STM<R2, E2, C>
468
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2 | E, B | C>
456
+ orElse: (a: NoInfer<A>) => STM.STM<C, E2, R2>
457
+ ): <R, E>(self: STM.STM<A, E, R>) => STM.STM<B | C, E2 | E, R2 | R>
469
458
  <A, R2, E2, B>(
470
459
  predicate: Predicate<NoInfer<A>>,
471
- orElse: (a: NoInfer<A>) => STM.STM<R2, E2, B>
472
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2 | E, A | B>
460
+ orElse: (a: NoInfer<A>) => STM.STM<B, E2, R2>
461
+ ): <R, E>(self: STM.STM<A, E, R>) => STM.STM<A | B, E2 | E, R2 | R>
473
462
  <R, E, A, B extends A, R2, E2, C>(
474
- self: STM.STM<R, E, A>,
463
+ self: STM.STM<A, E, R>,
475
464
  refinement: Refinement<A, B>,
476
- orElse: (a: A) => STM.STM<R2, E2, C>
477
- ): STM.STM<R | R2, E | E2, B | C>
465
+ orElse: (a: A) => STM.STM<C, E2, R2>
466
+ ): STM.STM<B | C, E | E2, R | R2>
478
467
  <R, E, A, R2, E2, B>(
479
- self: STM.STM<R, E, A>,
468
+ self: STM.STM<A, E, R>,
480
469
  predicate: Predicate<A>,
481
- orElse: (a: A) => STM.STM<R2, E2, B>
482
- ): STM.STM<R | R2, E | E2, A | B>
470
+ orElse: (a: A) => STM.STM<B, E2, R2>
471
+ ): STM.STM<A | B, E | E2, R | R2>
483
472
  } = dual(
484
473
  3,
485
474
  <R, E, A, R2, E2, B>(
486
- self: STM.STM<R, E, A>,
475
+ self: STM.STM<A, E, R>,
487
476
  predicate: Predicate<A>,
488
- orElse: (a: A) => STM.STM<R2, E2, B>
489
- ): STM.STM<R | R2, E | E2, A | B> =>
490
- core.flatMap(self, (a): STM.STM<R2, E2, A | B> => predicate(a) ? core.succeed(a) : orElse(a))
477
+ orElse: (a: A) => STM.STM<B, E2, R2>
478
+ ): STM.STM<A | B, E | E2, R | R2> =>
479
+ core.flatMap(self, (a): STM.STM<A | B, E2, R2> => predicate(a) ? core.succeed(a) : orElse(a))
491
480
  )
492
481
 
493
482
  /** @internal */
@@ -495,20 +484,20 @@ export const filterOrFail: {
495
484
  <A, B extends A, E2>(
496
485
  refinement: Refinement<NoInfer<A>, B>,
497
486
  orFailWith: (a: NoInfer<A>) => E2
498
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E2 | E, B>
487
+ ): <R, E>(self: STM.STM<A, E, R>) => STM.STM<B, E2 | E, R>
499
488
  <A, E2>(
500
489
  predicate: Predicate<NoInfer<A>>,
501
490
  orFailWith: (a: NoInfer<A>) => E2
502
- ): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E2 | E, A>
491
+ ): <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E2 | E, R>
503
492
  <R, E, A, B extends A, E2>(
504
- self: STM.STM<R, E, A>,
493
+ self: STM.STM<A, E, R>,
505
494
  refinement: Refinement<A, B>,
506
495
  orFailWith: (a: A) => E2
507
- ): STM.STM<R, E | E2, B>
508
- <R, E, A, E2>(self: STM.STM<R, E, A>, predicate: Predicate<A>, orFailWith: (a: A) => E2): STM.STM<R, E | E2, A>
496
+ ): STM.STM<B, E | E2, R>
497
+ <R, E, A, E2>(self: STM.STM<A, E, R>, predicate: Predicate<A>, orFailWith: (a: A) => E2): STM.STM<A, E | E2, R>
509
498
  } = dual(
510
499
  3,
511
- <R, E, A, E2>(self: STM.STM<R, E, A>, predicate: Predicate<A>, orFailWith: (a: A) => E2): STM.STM<R, E | E2, A> =>
500
+ <R, E, A, E2>(self: STM.STM<A, E, R>, predicate: Predicate<A>, orFailWith: (a: A) => E2): STM.STM<A, E | E2, R> =>
512
501
  filterOrElse(
513
502
  self,
514
503
  predicate,
@@ -517,24 +506,24 @@ export const filterOrFail: {
517
506
  )
518
507
 
519
508
  /** @internal */
520
- export const flatten = <R, E, R2, E2, A>(self: STM.STM<R, E, STM.STM<R2, E2, A>>): STM.STM<R | R2, E | E2, A> =>
509
+ export const flatten = <R, E, R2, E2, A>(self: STM.STM<STM.STM<A, E2, R2>, E, R>): STM.STM<A, E | E2, R | R2> =>
521
510
  core.flatMap(self, identity)
522
511
 
523
512
  /** @internal */
524
- export const flip = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, A, E> =>
513
+ export const flip = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<E, A, R> =>
525
514
  core.matchSTM(self, { onFailure: core.succeed, onSuccess: core.fail })
526
515
 
527
516
  /** @internal */
528
517
  export const flipWith = dual<
529
518
  <R, A, E, R2, A2, E2>(
530
- f: (stm: STM.STM<R, A, E>) => STM.STM<R2, A2, E2>
519
+ f: (stm: STM.STM<E, A, R>) => STM.STM<E2, A2, R2>
531
520
  ) => (
532
- self: STM.STM<R, E, A>
533
- ) => STM.STM<R | R2, E | E2, A | A2>,
521
+ self: STM.STM<A, E, R>
522
+ ) => STM.STM<A | A2, E | E2, R | R2>,
534
523
  <R, A, E, R2, A2, E2>(
535
- self: STM.STM<R, E, A>,
536
- f: (stm: STM.STM<R, A, E>) => STM.STM<R2, A2, E2>
537
- ) => STM.STM<R | R2, E | E2, A | A2>
524
+ self: STM.STM<A, E, R>,
525
+ f: (stm: STM.STM<E, A, R>) => STM.STM<E2, A2, R2>
526
+ ) => STM.STM<A | A2, E | E2, R | R2>
538
527
  >(2, (self, f) => flip(f(flip(self))))
539
528
 
540
529
  /** @internal */
@@ -542,11 +531,11 @@ export const match = dual<
542
531
  <E, A2, A, A3>(options: {
543
532
  readonly onFailure: (error: E) => A2
544
533
  readonly onSuccess: (value: A) => A3
545
- }) => <R>(self: STM.STM<R, E, A>) => STM.STM<R, never, A2 | A3>,
546
- <R, E, A2, A, A3>(self: STM.STM<R, E, A>, options: {
534
+ }) => <R>(self: STM.STM<A, E, R>) => STM.STM<A2 | A3, never, R>,
535
+ <R, E, A2, A, A3>(self: STM.STM<A, E, R>, options: {
547
536
  readonly onFailure: (error: E) => A2
548
537
  readonly onSuccess: (value: A) => A3
549
- }) => STM.STM<R, never, A2 | A3>
538
+ }) => STM.STM<A2 | A3, never, R>
550
539
  >(2, (self, { onFailure, onSuccess }) =>
551
540
  core.matchSTM(self, {
552
541
  onFailure: (e) => core.succeed(onFailure(e)),
@@ -556,31 +545,31 @@ export const match = dual<
556
545
  /** @internal */
557
546
  export const forEach = dual<
558
547
  {
559
- <A, R, E, A2>(f: (a: A) => STM.STM<R, E, A2>, options?: {
548
+ <A, R, E, A2>(f: (a: A) => STM.STM<A2, E, R>, options?: {
560
549
  readonly discard?: false | undefined
561
- }): (elements: Iterable<A>) => STM.STM<R, E, Array<A2>>
562
- <A, R, E, A2>(f: (a: A) => STM.STM<R, E, A2>, options: {
550
+ }): (elements: Iterable<A>) => STM.STM<Array<A2>, E, R>
551
+ <A, R, E, A2>(f: (a: A) => STM.STM<A2, E, R>, options: {
563
552
  readonly discard: true
564
- }): (elements: Iterable<A>) => STM.STM<R, E, void>
553
+ }): (elements: Iterable<A>) => STM.STM<void, E, R>
565
554
  },
566
555
  {
567
- <A, R, E, A2>(elements: Iterable<A>, f: (a: A) => STM.STM<R, E, A2>, options?: {
556
+ <A, R, E, A2>(elements: Iterable<A>, f: (a: A) => STM.STM<A2, E, R>, options?: {
568
557
  readonly discard?: false | undefined
569
- }): STM.STM<R, E, Array<A2>>
570
- <A, R, E, A2>(elements: Iterable<A>, f: (a: A) => STM.STM<R, E, A2>, options: {
558
+ }): STM.STM<Array<A2>, E, R>
559
+ <A, R, E, A2>(elements: Iterable<A>, f: (a: A) => STM.STM<A2, E, R>, options: {
571
560
  readonly discard: true
572
- }): STM.STM<R, E, void>
561
+ }): STM.STM<void, E, R>
573
562
  }
574
563
  >(
575
564
  (args) => predicate.isIterable(args[0]),
576
- <A, R, E, A2>(iterable: Iterable<A>, f: (a: A) => STM.STM<R, E, A2>, options?: {
565
+ <A, R, E, A2>(iterable: Iterable<A>, f: (a: A) => STM.STM<A2, E, R>, options?: {
577
566
  readonly discard?: boolean | undefined
578
- }): STM.STM<R, E, any> => {
567
+ }): STM.STM<any, E, R> => {
579
568
  if (options?.discard) {
580
569
  return pipe(
581
570
  core.sync(() => iterable[Symbol.iterator]()),
582
571
  core.flatMap((iterator) => {
583
- const loop: STM.STM<R, E, void> = suspend(() => {
572
+ const loop: STM.STM<void, E, R> = suspend(() => {
584
573
  const next = iterator.next()
585
574
  if (next.done) {
586
575
  return unit
@@ -599,14 +588,14 @@ export const forEach = dual<
599
588
  array.push(elem)
600
589
  return array
601
590
  }),
602
- core.succeed([]) as STM.STM<R, E, Array<A2>>
591
+ core.succeed([]) as STM.STM<Array<A2>, E, R>
603
592
  )
604
593
  )
605
594
  }
606
595
  )
607
596
 
608
597
  /** @internal */
609
- export const fromEither = <E, A>(either: Either.Either<E, A>): STM.STM<never, E, A> => {
598
+ export const fromEither = <E, A>(either: Either.Either<E, A>): STM.STM<A, E> => {
610
599
  switch (either._tag) {
611
600
  case "Left": {
612
601
  return core.fail(either.left)
@@ -618,7 +607,7 @@ export const fromEither = <E, A>(either: Either.Either<E, A>): STM.STM<never, E,
618
607
  }
619
608
 
620
609
  /** @internal */
621
- export const fromOption = <A>(option: Option.Option<A>): STM.STM<never, Option.Option<never>, A> =>
610
+ export const fromOption = <A>(option: Option.Option<A>): STM.STM<A, Option.Option<never>> =>
622
611
  Option.match(option, {
623
612
  onNone: () => core.fail(Option.none()),
624
613
  onSome: core.succeed
@@ -661,7 +650,7 @@ export const gen: typeof STM.gen = (f) =>
661
650
  })
662
651
 
663
652
  /** @internal */
664
- export const head = <R, E, A>(self: STM.STM<R, E, Iterable<A>>): STM.STM<R, Option.Option<E>, A> =>
653
+ export const head = <A, E, R>(self: STM.STM<Iterable<A>, E, R>): STM.STM<A, Option.Option<E>, R> =>
665
654
  pipe(
666
655
  self,
667
656
  core.matchSTM({
@@ -682,55 +671,55 @@ export const head = <R, E, A>(self: STM.STM<R, E, Iterable<A>>): STM.STM<R, Opti
682
671
  export const if_ = dual<
683
672
  <R1, R2, E1, E2, A, A1>(
684
673
  options: {
685
- readonly onTrue: STM.STM<R1, E1, A>
686
- readonly onFalse: STM.STM<R2, E2, A1>
674
+ readonly onTrue: STM.STM<A, E1, R1>
675
+ readonly onFalse: STM.STM<A1, E2, R2>
687
676
  }
688
677
  ) => <R = never, E = never>(
689
- self: STM.STM<R, E, boolean> | boolean
690
- ) => STM.STM<R1 | R2 | R, E1 | E2 | E, A | A1>,
678
+ self: STM.STM<boolean, E, R> | boolean
679
+ ) => STM.STM<A | A1, E1 | E2 | E, R1 | R2 | R>,
691
680
  {
692
681
  <R, E, R1, R2, E1, E2, A, A1>(
693
682
  self: boolean,
694
683
  options: {
695
- readonly onTrue: STM.STM<R1, E1, A>
696
- readonly onFalse: STM.STM<R2, E2, A1>
684
+ readonly onTrue: STM.STM<A, E1, R1>
685
+ readonly onFalse: STM.STM<A1, E2, R2>
697
686
  }
698
- ): STM.STM<R1 | R2 | R, E1 | E2 | E, A | A1>
687
+ ): STM.STM<A | A1, E1 | E2 | E, R1 | R2 | R>
699
688
  <R, E, R1, R2, E1, E2, A, A1>(
700
- self: STM.STM<R, E, boolean>,
689
+ self: STM.STM<boolean, E, R>,
701
690
  options: {
702
- readonly onTrue: STM.STM<R1, E1, A>
703
- readonly onFalse: STM.STM<R2, E2, A1>
691
+ readonly onTrue: STM.STM<A, E1, R1>
692
+ readonly onFalse: STM.STM<A1, E2, R2>
704
693
  }
705
- ): STM.STM<R1 | R2 | R, E1 | E2 | E, A | A1>
694
+ ): STM.STM<A | A1, E1 | E2 | E, R1 | R2 | R>
706
695
  }
707
696
  >(
708
697
  (args) => typeof args[0] === "boolean" || core.isSTM(args[0]),
709
698
  <R, E, R1, R2, E1, E2, A, A1>(
710
- self: STM.STM<R, E, boolean> | boolean,
699
+ self: STM.STM<boolean, E, R> | boolean,
711
700
  { onFalse, onTrue }: {
712
- readonly onTrue: STM.STM<R1, E1, A>
713
- readonly onFalse: STM.STM<R2, E2, A1>
701
+ readonly onTrue: STM.STM<A, E1, R1>
702
+ readonly onFalse: STM.STM<A1, E2, R2>
714
703
  }
715
704
  ) => {
716
705
  if (typeof self === "boolean") {
717
706
  return self ? onTrue : onFalse
718
707
  }
719
708
 
720
- return core.flatMap(self, (bool): STM.STM<R1 | R2 | R, E1 | E2 | E, A | A1> => bool ? onTrue : onFalse)
709
+ return core.flatMap(self, (bool): STM.STM<A | A1, E1 | E2 | E, R1 | R2 | R> => bool ? onTrue : onFalse)
721
710
  }
722
711
  )
723
712
 
724
713
  /** @internal */
725
- export const ignore = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, never, void> =>
714
+ export const ignore = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<void, never, R> =>
726
715
  match(self, { onFailure: () => unit, onSuccess: () => unit })
727
716
 
728
717
  /** @internal */
729
- export const isFailure = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, never, boolean> =>
718
+ export const isFailure = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<boolean, never, R> =>
730
719
  match(self, { onFailure: constTrue, onSuccess: constFalse })
731
720
 
732
721
  /** @internal */
733
- export const isSuccess = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, never, boolean> =>
722
+ export const isSuccess = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<boolean, never, R> =>
734
723
  match(self, { onFailure: constFalse, onSuccess: constTrue })
735
724
 
736
725
  /** @internal */
@@ -738,15 +727,15 @@ export const iterate = <R, E, Z>(
738
727
  initial: Z,
739
728
  options: {
740
729
  readonly while: (z: Z) => boolean
741
- readonly body: (z: Z) => STM.STM<R, E, Z>
730
+ readonly body: (z: Z) => STM.STM<Z, E, R>
742
731
  }
743
- ): STM.STM<R, E, Z> => iterateLoop(initial, options.while, options.body)
732
+ ): STM.STM<Z, E, R> => iterateLoop(initial, options.while, options.body)
744
733
 
745
734
  const iterateLoop = <R, E, Z>(
746
735
  initial: Z,
747
736
  cont: (z: Z) => boolean,
748
- body: (z: Z) => STM.STM<R, E, Z>
749
- ): STM.STM<R, E, Z> => {
737
+ body: (z: Z) => STM.STM<Z, E, R>
738
+ ): STM.STM<Z, E, R> => {
750
739
  if (cont(initial)) {
751
740
  return pipe(
752
741
  body(initial),
@@ -763,28 +752,28 @@ export const loop: {
763
752
  options: {
764
753
  readonly while: (z: Z) => boolean
765
754
  readonly step: (z: Z) => Z
766
- readonly body: (z: Z) => STM.STM<R, E, A>
755
+ readonly body: (z: Z) => STM.STM<A, E, R>
767
756
  readonly discard?: false | undefined
768
757
  }
769
- ): STM.STM<R, E, Array<A>>
758
+ ): STM.STM<Array<A>, E, R>
770
759
  <Z, R, E, A>(
771
760
  initial: Z,
772
761
  options: {
773
762
  readonly while: (z: Z) => boolean
774
763
  readonly step: (z: Z) => Z
775
- readonly body: (z: Z) => STM.STM<R, E, A>
764
+ readonly body: (z: Z) => STM.STM<A, E, R>
776
765
  readonly discard: true
777
766
  }
778
- ): STM.STM<R, E, void>
767
+ ): STM.STM<void, E, R>
779
768
  } = <Z, R, E, A>(
780
769
  initial: Z,
781
770
  options: {
782
771
  readonly while: (z: Z) => boolean
783
772
  readonly step: (z: Z) => Z
784
- readonly body: (z: Z) => STM.STM<R, E, A>
773
+ readonly body: (z: Z) => STM.STM<A, E, R>
785
774
  readonly discard?: boolean | undefined
786
775
  }
787
- ): STM.STM<R, E, any> =>
776
+ ): STM.STM<any, E, R> =>
788
777
  options.discard ?
789
778
  loopDiscardLoop(initial, options.while, options.step, options.body) :
790
779
  core.map(loopLoop(initial, options.while, options.step, options.body), (a) => Array.from(a))
@@ -793,8 +782,8 @@ const loopLoop = <Z, R, E, A>(
793
782
  initial: Z,
794
783
  cont: (z: Z) => boolean,
795
784
  inc: (z: Z) => Z,
796
- body: (z: Z) => STM.STM<R, E, A>
797
- ): STM.STM<R, E, Chunk.Chunk<A>> => {
785
+ body: (z: Z) => STM.STM<A, E, R>
786
+ ): STM.STM<Chunk.Chunk<A>, E, R> => {
798
787
  if (cont(initial)) {
799
788
  return pipe(
800
789
  body(initial),
@@ -808,8 +797,8 @@ const loopDiscardLoop = <Z, R, E, X>(
808
797
  initial: Z,
809
798
  cont: (z: Z) => boolean,
810
799
  inc: (z: Z) => Z,
811
- body: (z: Z) => STM.STM<R, E, X>
812
- ): STM.STM<R, E, void> => {
800
+ body: (z: Z) => STM.STM<X, E, R>
801
+ ): STM.STM<void, E, R> => {
813
802
  if (cont(initial)) {
814
803
  return pipe(
815
804
  body(initial),
@@ -821,9 +810,9 @@ const loopDiscardLoop = <Z, R, E, X>(
821
810
 
822
811
  /** @internal */
823
812
  export const mapAttempt = dual<
824
- <A, B>(f: (a: A) => B) => <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, unknown, B>,
825
- <R, E, A, B>(self: STM.STM<R, E, A>, f: (a: A) => B) => STM.STM<R, unknown, B>
826
- >(2, <R, E, A, B>(self: STM.STM<R, E, A>, f: (a: A) => B): STM.STM<R, unknown, B> =>
813
+ <A, B>(f: (a: A) => B) => <R, E>(self: STM.STM<A, E, R>) => STM.STM<B, unknown, R>,
814
+ <R, E, A, B>(self: STM.STM<A, E, R>, f: (a: A) => B) => STM.STM<B, unknown, R>
815
+ >(2, <R, E, A, B>(self: STM.STM<A, E, R>, f: (a: A) => B): STM.STM<B, unknown, R> =>
827
816
  core.matchSTM(self, {
828
817
  onFailure: (e) => core.fail(e),
829
818
  onSuccess: (a) => attempt(() => f(a))
@@ -834,11 +823,11 @@ export const mapBoth = dual<
834
823
  <E, E2, A, A2>(options: {
835
824
  readonly onFailure: (error: E) => E2
836
825
  readonly onSuccess: (value: A) => A2
837
- }) => <R>(self: STM.STM<R, E, A>) => STM.STM<R, E2, A2>,
838
- <R, E, E2, A, A2>(self: STM.STM<R, E, A>, options: {
826
+ }) => <R>(self: STM.STM<A, E, R>) => STM.STM<A2, E2, R>,
827
+ <R, E, E2, A, A2>(self: STM.STM<A, E, R>, options: {
839
828
  readonly onFailure: (error: E) => E2
840
829
  readonly onSuccess: (value: A) => A2
841
- }) => STM.STM<R, E2, A2>
830
+ }) => STM.STM<A2, E2, R>
842
831
  >(2, (self, { onFailure, onSuccess }) =>
843
832
  core.matchSTM(self, {
844
833
  onFailure: (e) => core.fail(onFailure(e)),
@@ -847,8 +836,8 @@ export const mapBoth = dual<
847
836
 
848
837
  /** @internal */
849
838
  export const mapError = dual<
850
- <E, E2>(f: (error: E) => E2) => <R, A>(self: STM.STM<R, E, A>) => STM.STM<R, E2, A>,
851
- <R, A, E, E2>(self: STM.STM<R, E, A>, f: (error: E) => E2) => STM.STM<R, E2, A>
839
+ <E, E2>(f: (error: E) => E2) => <R, A>(self: STM.STM<A, E, R>) => STM.STM<A, E2, R>,
840
+ <R, A, E, E2>(self: STM.STM<A, E, R>, f: (error: E) => E2) => STM.STM<A, E2, R>
852
841
  >(2, (self, f) =>
853
842
  core.matchSTM(self, {
854
843
  onFailure: (e) => core.fail(f(e)),
@@ -856,29 +845,29 @@ export const mapError = dual<
856
845
  }))
857
846
 
858
847
  /** @internal */
859
- export const merge = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, never, E | A> =>
848
+ export const merge = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<E | A, never, R> =>
860
849
  core.matchSTM(self, { onFailure: (e) => core.succeed(e), onSuccess: core.succeed })
861
850
 
862
851
  /** @internal */
863
852
  export const mergeAll = dual<
864
- <A2, A>(zero: A2, f: (a2: A2, a: A) => A2) => <R, E>(iterable: Iterable<STM.STM<R, E, A>>) => STM.STM<R, E, A2>,
865
- <R, E, A2, A>(iterable: Iterable<STM.STM<R, E, A>>, zero: A2, f: (a2: A2, a: A) => A2) => STM.STM<R, E, A2>
853
+ <A2, A>(zero: A2, f: (a2: A2, a: A) => A2) => <R, E>(iterable: Iterable<STM.STM<A, E, R>>) => STM.STM<A2, E, R>,
854
+ <R, E, A2, A>(iterable: Iterable<STM.STM<A, E, R>>, zero: A2, f: (a2: A2, a: A) => A2) => STM.STM<A2, E, R>
866
855
  >(
867
856
  3,
868
- <R, E, A2, A>(iterable: Iterable<STM.STM<R, E, A>>, zero: A2, f: (a2: A2, a: A) => A2): STM.STM<R, E, A2> =>
857
+ <R, E, A2, A>(iterable: Iterable<STM.STM<A, E, R>>, zero: A2, f: (a2: A2, a: A) => A2): STM.STM<A2, E, R> =>
869
858
  suspend(() =>
870
859
  Array.from(iterable).reduce(
871
860
  (acc, curr) => pipe(acc, core.zipWith(curr, f)),
872
- core.succeed(zero) as STM.STM<R, E, A2>
861
+ core.succeed(zero) as STM.STM<A2, E, R>
873
862
  )
874
863
  )
875
864
  )
876
865
 
877
866
  /** @internal */
878
- export const negate = <R, E>(self: STM.STM<R, E, boolean>): STM.STM<R, E, boolean> => pipe(self, core.map((b) => !b))
867
+ export const negate = <R, E>(self: STM.STM<boolean, E, R>): STM.STM<boolean, E, R> => pipe(self, core.map((b) => !b))
879
868
 
880
869
  /** @internal */
881
- export const none = <R, E, A>(self: STM.STM<R, E, Option.Option<A>>): STM.STM<R, Option.Option<E>, void> =>
870
+ export const none = <A, E, R>(self: STM.STM<Option.Option<A>, E, R>): STM.STM<void, Option.Option<E>, R> =>
882
871
  core.matchSTM(self, {
883
872
  onFailure: (e) => core.fail(Option.some(e)),
884
873
  onSuccess: Option.match({
@@ -888,25 +877,25 @@ export const none = <R, E, A>(self: STM.STM<R, E, Option.Option<A>>): STM.STM<R,
888
877
  })
889
878
 
890
879
  /** @internal */
891
- export const option = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, never, Option.Option<A>> =>
880
+ export const option = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<Option.Option<A>, never, R> =>
892
881
  match(self, { onFailure: () => Option.none(), onSuccess: Option.some })
893
882
 
894
883
  /** @internal */
895
- export const orDie = <R, E, A>(self: STM.STM<R, E, A>): STM.STM<R, never, A> => pipe(self, orDieWith(identity))
884
+ export const orDie = <A, E, R>(self: STM.STM<A, E, R>): STM.STM<A, never, R> => pipe(self, orDieWith(identity))
896
885
 
897
886
  /** @internal */
898
887
  export const orDieWith = dual<
899
- <E>(f: (error: E) => unknown) => <R, A>(self: STM.STM<R, E, A>) => STM.STM<R, never, A>,
900
- <R, A, E>(self: STM.STM<R, E, A>, f: (error: E) => unknown) => STM.STM<R, never, A>
888
+ <E>(f: (error: E) => unknown) => <R, A>(self: STM.STM<A, E, R>) => STM.STM<A, never, R>,
889
+ <R, A, E>(self: STM.STM<A, E, R>, f: (error: E) => unknown) => STM.STM<A, never, R>
901
890
  >(2, (self, f) => pipe(self, mapError(f), core.catchAll(core.die)))
902
891
 
903
892
  /** @internal */
904
893
  export const orElse = dual<
905
- <R2, E2, A2>(that: LazyArg<STM.STM<R2, E2, A2>>) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2, A2 | A>,
906
- <R, E, A, R2, E2, A2>(self: STM.STM<R, E, A>, that: LazyArg<STM.STM<R2, E2, A2>>) => STM.STM<R2 | R, E2, A2 | A>
894
+ <R2, E2, A2>(that: LazyArg<STM.STM<A2, E2, R2>>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A2 | A, E2, R2 | R>,
895
+ <R, E, A, R2, E2, A2>(self: STM.STM<A, E, R>, that: LazyArg<STM.STM<A2, E2, R2>>) => STM.STM<A2 | A, E2, R2 | R>
907
896
  >(
908
897
  2,
909
- <R, E, A, R2, E2, A2>(self: STM.STM<R, E, A>, that: LazyArg<STM.STM<R2, E2, A2>>): STM.STM<R2 | R, E2, A2 | A> =>
898
+ <R, E, A, R2, E2, A2>(self: STM.STM<A, E, R>, that: LazyArg<STM.STM<A2, E2, R2>>): STM.STM<A2 | A, E2, R2 | R> =>
910
899
  core.flatMap(core.effect<R, LazyArg<void>>((journal) => Journal.prepareResetJournal(journal)), (reset) =>
911
900
  pipe(
912
901
  core.orTry(self, () => core.flatMap(core.sync(reset), that)),
@@ -917,50 +906,50 @@ export const orElse = dual<
917
906
  /** @internal */
918
907
  export const orElseEither = dual<
919
908
  <R2, E2, A2>(
920
- that: LazyArg<STM.STM<R2, E2, A2>>
921
- ) => <R, E, A>(
922
- self: STM.STM<R, E, A>
923
- ) => STM.STM<R2 | R, E2, Either.Either<A, A2>>,
909
+ that: LazyArg<STM.STM<A2, E2, R2>>
910
+ ) => <A, E, R>(
911
+ self: STM.STM<A, E, R>
912
+ ) => STM.STM<Either.Either<A, A2>, E2, R2 | R>,
924
913
  <R, E, A, R2, E2, A2>(
925
- self: STM.STM<R, E, A>,
926
- that: LazyArg<STM.STM<R2, E2, A2>>
927
- ) => STM.STM<R2 | R, E2, Either.Either<A, A2>>
914
+ self: STM.STM<A, E, R>,
915
+ that: LazyArg<STM.STM<A2, E2, R2>>
916
+ ) => STM.STM<Either.Either<A, A2>, E2, R2 | R>
928
917
  >(
929
918
  2,
930
919
  <R, E, A, R2, E2, A2>(
931
- self: STM.STM<R, E, A>,
932
- that: LazyArg<STM.STM<R2, E2, A2>>
933
- ): STM.STM<R2 | R, E2, Either.Either<A, A2>> =>
920
+ self: STM.STM<A, E, R>,
921
+ that: LazyArg<STM.STM<A2, E2, R2>>
922
+ ): STM.STM<Either.Either<A, A2>, E2, R2 | R> =>
934
923
  orElse(core.map(self, Either.left), () => core.map(that(), Either.right))
935
924
  )
936
925
 
937
926
  /** @internal */
938
927
  export const orElseFail = dual<
939
- <E2>(error: LazyArg<E2>) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R, E2, A>,
940
- <R, E, A, E2>(self: STM.STM<R, E, A>, error: LazyArg<E2>) => STM.STM<R, E2, A>
928
+ <E2>(error: LazyArg<E2>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A, E2, R>,
929
+ <R, E, A, E2>(self: STM.STM<A, E, R>, error: LazyArg<E2>) => STM.STM<A, E2, R>
941
930
  >(
942
931
  2,
943
- <R, E, A, E2>(self: STM.STM<R, E, A>, error: LazyArg<E2>): STM.STM<R, E2, A> =>
932
+ <R, E, A, E2>(self: STM.STM<A, E, R>, error: LazyArg<E2>): STM.STM<A, E2, R> =>
944
933
  orElse(self, () => core.failSync(error))
945
934
  )
946
935
 
947
936
  /** @internal */
948
937
  export const orElseOptional = dual<
949
938
  <R2, E2, A2>(
950
- that: LazyArg<STM.STM<R2, Option.Option<E2>, A2>>
951
- ) => <R, E, A>(
952
- self: STM.STM<R, Option.Option<E>, A>
953
- ) => STM.STM<R2 | R, Option.Option<E2 | E>, A2 | A>,
939
+ that: LazyArg<STM.STM<A2, Option.Option<E2>, R2>>
940
+ ) => <A, E, R>(
941
+ self: STM.STM<A, Option.Option<E>, R>
942
+ ) => STM.STM<A2 | A, Option.Option<E2 | E>, R2 | R>,
954
943
  <R, E, A, R2, E2, A2>(
955
- self: STM.STM<R, Option.Option<E>, A>,
956
- that: LazyArg<STM.STM<R2, Option.Option<E2>, A2>>
957
- ) => STM.STM<R2 | R, Option.Option<E2 | E>, A2 | A>
944
+ self: STM.STM<A, Option.Option<E>, R>,
945
+ that: LazyArg<STM.STM<A2, Option.Option<E2>, R2>>
946
+ ) => STM.STM<A2 | A, Option.Option<E2 | E>, R2 | R>
958
947
  >(
959
948
  2,
960
949
  <R, E, A, R2, E2, A2>(
961
- self: STM.STM<R, Option.Option<E>, A>,
962
- that: LazyArg<STM.STM<R2, Option.Option<E2>, A2>>
963
- ): STM.STM<R2 | R, Option.Option<E2 | E>, A2 | A> =>
950
+ self: STM.STM<A, Option.Option<E>, R>,
951
+ that: LazyArg<STM.STM<A2, Option.Option<E2>, R2>>
952
+ ): STM.STM<A2 | A, Option.Option<E2 | E>, R2 | R> =>
964
953
  core.catchAll(
965
954
  self,
966
955
  Option.match({
@@ -972,28 +961,28 @@ export const orElseOptional = dual<
972
961
 
973
962
  /** @internal */
974
963
  export const orElseSucceed = dual<
975
- <A2>(value: LazyArg<A2>) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R, never, A2 | A>,
976
- <R, E, A, A2>(self: STM.STM<R, E, A>, value: LazyArg<A2>) => STM.STM<R, never, A2 | A>
964
+ <A2>(value: LazyArg<A2>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A2 | A, never, R>,
965
+ <R, E, A, A2>(self: STM.STM<A, E, R>, value: LazyArg<A2>) => STM.STM<A2 | A, never, R>
977
966
  >(
978
967
  2,
979
- <R, E, A, A2>(self: STM.STM<R, E, A>, value: LazyArg<A2>): STM.STM<R, never, A2 | A> =>
968
+ <R, E, A, A2>(self: STM.STM<A, E, R>, value: LazyArg<A2>): STM.STM<A2 | A, never, R> =>
980
969
  orElse(self, () => core.sync(value))
981
970
  )
982
971
 
983
972
  /** @internal */
984
973
  export const provideContext = dual<
985
- <R>(env: Context.Context<R>) => <E, A>(self: STM.STM<R, E, A>) => STM.STM<never, E, A>,
986
- <E, A, R>(self: STM.STM<R, E, A>, env: Context.Context<R>) => STM.STM<never, E, A>
974
+ <R>(env: Context.Context<R>) => <A, E>(self: STM.STM<A, E, R>) => STM.STM<A, E>,
975
+ <A, E, R>(self: STM.STM<A, E, R>, env: Context.Context<R>) => STM.STM<A, E>
987
976
  >(2, (self, env) => core.mapInputContext(self, (_: Context.Context<never>) => env))
988
977
 
989
978
  /** @internal */
990
979
  export const provideSomeContext = dual<
991
- <R>(context: Context.Context<R>) => <R1, E, A>(self: STM.STM<R1, E, A>) => STM.STM<Exclude<R1, R>, E, A>,
992
- <R, R1, E, A>(self: STM.STM<R1, E, A>, context: Context.Context<R>) => STM.STM<Exclude<R1, R>, E, A>
980
+ <R>(context: Context.Context<R>) => <R1, E, A>(self: STM.STM<A, E, R1>) => STM.STM<A, E, Exclude<R1, R>>,
981
+ <R, R1, E, A>(self: STM.STM<A, E, R1>, context: Context.Context<R>) => STM.STM<A, E, Exclude<R1, R>>
993
982
  >(2, <R, R1, E, A>(
994
- self: STM.STM<R1, E, A>,
983
+ self: STM.STM<A, E, R1>,
995
984
  context: Context.Context<R>
996
- ): STM.STM<Exclude<R1, R>, E, A> =>
985
+ ): STM.STM<A, E, Exclude<R1, R>> =>
997
986
  core.mapInputContext(
998
987
  self,
999
988
  (parent: Context.Context<Exclude<R1, R>>): Context.Context<R1> => Context.merge(parent, context) as any
@@ -1004,34 +993,34 @@ export const provideService = dual<
1004
993
  <T extends Context.Tag<any, any>>(
1005
994
  tag: T,
1006
995
  resource: Context.Tag.Service<T>
1007
- ) => <R, E, A>(
1008
- self: STM.STM<R, E, A>
1009
- ) => STM.STM<Exclude<R, Context.Tag.Identifier<T>>, E, A>,
996
+ ) => <A, E, R>(
997
+ self: STM.STM<A, E, R>
998
+ ) => STM.STM<A, E, Exclude<R, Context.Tag.Identifier<T>>>,
1010
999
  <R, E, A, T extends Context.Tag<any, any>>(
1011
- self: STM.STM<R, E, A>,
1000
+ self: STM.STM<A, E, R>,
1012
1001
  tag: T,
1013
1002
  resource: Context.Tag.Service<T>
1014
- ) => STM.STM<Exclude<R, Context.Tag.Identifier<T>>, E, A>
1003
+ ) => STM.STM<A, E, Exclude<R, Context.Tag.Identifier<T>>>
1015
1004
  >(3, (self, tag, resource) => provideServiceSTM(self, tag, core.succeed(resource)))
1016
1005
 
1017
1006
  /** @internal */
1018
1007
  export const provideServiceSTM = dual<
1019
1008
  <T extends Context.Tag<any, any>, R1, E1>(
1020
1009
  tag: T,
1021
- stm: STM.STM<R1, E1, Context.Tag.Service<T>>
1022
- ) => <R, E, A>(
1023
- self: STM.STM<R, E, A>
1024
- ) => STM.STM<R1 | Exclude<R, Context.Tag.Identifier<T>>, E1 | E, A>,
1010
+ stm: STM.STM<Context.Tag.Service<T>, E1, R1>
1011
+ ) => <A, E, R>(
1012
+ self: STM.STM<A, E, R>
1013
+ ) => STM.STM<A, E1 | E, R1 | Exclude<R, Context.Tag.Identifier<T>>>,
1025
1014
  <R, E, A, T extends Context.Tag<any, any>, R1, E1>(
1026
- self: STM.STM<R, E, A>,
1015
+ self: STM.STM<A, E, R>,
1027
1016
  tag: T,
1028
- stm: STM.STM<R1, E1, Context.Tag.Service<T>>
1029
- ) => STM.STM<R1 | Exclude<R, Context.Tag.Identifier<T>>, E1 | E, A>
1017
+ stm: STM.STM<Context.Tag.Service<T>, E1, R1>
1018
+ ) => STM.STM<A, E1 | E, R1 | Exclude<R, Context.Tag.Identifier<T>>>
1030
1019
  >(3, <R, E, A, T extends Context.Tag<any, any>, R1, E1>(
1031
- self: STM.STM<R, E, A>,
1020
+ self: STM.STM<A, E, R>,
1032
1021
  tag: T,
1033
- stm: STM.STM<R1, E1, Context.Tag.Service<T>>
1034
- ): STM.STM<R1 | Exclude<R, Context.Tag.Identifier<T>>, E1 | E, A> =>
1022
+ stm: STM.STM<Context.Tag.Service<T>, E1, R1>
1023
+ ): STM.STM<A, E1 | E, R1 | Exclude<R, Context.Tag.Identifier<T>>> =>
1035
1024
  core.contextWithSTM((env: Context.Context<R1 | Exclude<R, Context.Tag.Identifier<T>>>) =>
1036
1025
  core.flatMap(
1037
1026
  stm,
@@ -1045,15 +1034,15 @@ export const provideServiceSTM = dual<
1045
1034
 
1046
1035
  /** @internal */
1047
1036
  export const reduce = dual<
1048
- <S, A, R, E>(zero: S, f: (s: S, a: A) => STM.STM<R, E, S>) => (iterable: Iterable<A>) => STM.STM<R, E, S>,
1049
- <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<R, E, S>) => STM.STM<R, E, S>
1037
+ <S, A, R, E>(zero: S, f: (s: S, a: A) => STM.STM<S, E, R>) => (iterable: Iterable<A>) => STM.STM<S, E, R>,
1038
+ <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<S, E, R>) => STM.STM<S, E, R>
1050
1039
  >(
1051
1040
  3,
1052
- <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<R, E, S>): STM.STM<R, E, S> =>
1041
+ <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<S, E, R>): STM.STM<S, E, R> =>
1053
1042
  suspend(() =>
1054
1043
  Array.from(iterable).reduce(
1055
1044
  (acc, curr) => pipe(acc, core.flatMap((s) => f(s, curr))),
1056
- core.succeed(zero) as STM.STM<R, E, S>
1045
+ core.succeed(zero) as STM.STM<S, E, R>
1057
1046
  )
1058
1047
  )
1059
1048
  )
@@ -1061,47 +1050,47 @@ export const reduce = dual<
1061
1050
  /** @internal */
1062
1051
  export const reduceAll = dual<
1063
1052
  <R2, E2, A>(
1064
- initial: STM.STM<R2, E2, A>,
1053
+ initial: STM.STM<A, E2, R2>,
1065
1054
  f: (x: A, y: A) => A
1066
1055
  ) => <R, E>(
1067
- iterable: Iterable<STM.STM<R, E, A>>
1068
- ) => STM.STM<R2 | R, E2 | E, A>,
1056
+ iterable: Iterable<STM.STM<A, E, R>>
1057
+ ) => STM.STM<A, E2 | E, R2 | R>,
1069
1058
  <R, E, R2, E2, A>(
1070
- iterable: Iterable<STM.STM<R, E, A>>,
1071
- initial: STM.STM<R2, E2, A>,
1059
+ iterable: Iterable<STM.STM<A, E, R>>,
1060
+ initial: STM.STM<A, E2, R2>,
1072
1061
  f: (x: A, y: A) => A
1073
- ) => STM.STM<R2 | R, E2 | E, A>
1062
+ ) => STM.STM<A, E2 | E, R2 | R>
1074
1063
  >(3, <R, E, R2, E2, A>(
1075
- iterable: Iterable<STM.STM<R, E, A>>,
1076
- initial: STM.STM<R2, E2, A>,
1064
+ iterable: Iterable<STM.STM<A, E, R>>,
1065
+ initial: STM.STM<A, E2, R2>,
1077
1066
  f: (x: A, y: A) => A
1078
- ): STM.STM<R2 | R, E2 | E, A> =>
1067
+ ): STM.STM<A, E2 | E, R2 | R> =>
1079
1068
  suspend(() =>
1080
1069
  Array.from(iterable).reduce(
1081
1070
  (acc, curr) => pipe(acc, core.zipWith(curr, f)),
1082
- initial as STM.STM<R | R2, E | E2, A>
1071
+ initial as STM.STM<A, E | E2, R | R2>
1083
1072
  )
1084
1073
  ))
1085
1074
 
1086
1075
  /** @internal */
1087
1076
  export const reduceRight = dual<
1088
- <S, A, R, E>(zero: S, f: (s: S, a: A) => STM.STM<R, E, S>) => (iterable: Iterable<A>) => STM.STM<R, E, S>,
1089
- <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<R, E, S>) => STM.STM<R, E, S>
1077
+ <S, A, R, E>(zero: S, f: (s: S, a: A) => STM.STM<S, E, R>) => (iterable: Iterable<A>) => STM.STM<S, E, R>,
1078
+ <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<S, E, R>) => STM.STM<S, E, R>
1090
1079
  >(
1091
1080
  3,
1092
- <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<R, E, S>): STM.STM<R, E, S> =>
1081
+ <S, A, R, E>(iterable: Iterable<A>, zero: S, f: (s: S, a: A) => STM.STM<S, E, R>): STM.STM<S, E, R> =>
1093
1082
  suspend(() =>
1094
1083
  Array.from(iterable).reduceRight(
1095
1084
  (acc, curr) => pipe(acc, core.flatMap((s) => f(s, curr))),
1096
- core.succeed(zero) as STM.STM<R, E, S>
1085
+ core.succeed(zero) as STM.STM<S, E, R>
1097
1086
  )
1098
1087
  )
1099
1088
  )
1100
1089
 
1101
1090
  /** @internal */
1102
1091
  export const refineOrDie = dual<
1103
- <E, E2>(pf: (error: E) => Option.Option<E2>) => <R, A>(self: STM.STM<R, E, A>) => STM.STM<R, E2, A>,
1104
- <R, A, E, E2>(self: STM.STM<R, E, A>, pf: (error: E) => Option.Option<E2>) => STM.STM<R, E2, A>
1092
+ <E, E2>(pf: (error: E) => Option.Option<E2>) => <R, A>(self: STM.STM<A, E, R>) => STM.STM<A, E2, R>,
1093
+ <R, A, E, E2>(self: STM.STM<A, E, R>, pf: (error: E) => Option.Option<E2>) => STM.STM<A, E2, R>
1105
1094
  >(2, (self, pf) => refineOrDieWith(self, pf, identity))
1106
1095
 
1107
1096
  /** @internal */
@@ -1110,13 +1099,13 @@ export const refineOrDieWith = dual<
1110
1099
  pf: (error: E) => Option.Option<E2>,
1111
1100
  f: (error: E) => unknown
1112
1101
  ) => <R, A>(
1113
- self: STM.STM<R, E, A>
1114
- ) => STM.STM<R, E2, A>,
1102
+ self: STM.STM<A, E, R>
1103
+ ) => STM.STM<A, E2, R>,
1115
1104
  <R, A, E, E2>(
1116
- self: STM.STM<R, E, A>,
1105
+ self: STM.STM<A, E, R>,
1117
1106
  pf: (error: E) => Option.Option<E2>,
1118
1107
  f: (error: E) => unknown
1119
- ) => STM.STM<R, E2, A>
1108
+ ) => STM.STM<A, E2, R>
1120
1109
  >(3, (self, pf, f) =>
1121
1110
  core.catchAll(
1122
1111
  self,
@@ -1129,8 +1118,8 @@ export const refineOrDieWith = dual<
1129
1118
 
1130
1119
  /** @internal */
1131
1120
  export const reject = dual<
1132
- <A, E2>(pf: (a: A) => Option.Option<E2>) => <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E2 | E, A>,
1133
- <R, E, A, E2>(self: STM.STM<R, E, A>, pf: (a: A) => Option.Option<E2>) => STM.STM<R, E2 | E, A>
1121
+ <A, E2>(pf: (a: A) => Option.Option<E2>) => <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E2 | E, R>,
1122
+ <R, E, A, E2>(self: STM.STM<A, E, R>, pf: (a: A) => Option.Option<E2>) => STM.STM<A, E2 | E, R>
1134
1123
  >(2, (self, pf) =>
1135
1124
  rejectSTM(
1136
1125
  self,
@@ -1140,14 +1129,14 @@ export const reject = dual<
1140
1129
  /** @internal */
1141
1130
  export const rejectSTM = dual<
1142
1131
  <A, R2, E2>(
1143
- pf: (a: A) => Option.Option<STM.STM<R2, E2, E2>>
1132
+ pf: (a: A) => Option.Option<STM.STM<E2, E2, R2>>
1144
1133
  ) => <R, E>(
1145
- self: STM.STM<R, E, A>
1146
- ) => STM.STM<R2 | R, E2 | E, A>,
1134
+ self: STM.STM<A, E, R>
1135
+ ) => STM.STM<A, E2 | E, R2 | R>,
1147
1136
  <R, E, A, R2, E2>(
1148
- self: STM.STM<R, E, A>,
1149
- pf: (a: A) => Option.Option<STM.STM<R2, E2, E2>>
1150
- ) => STM.STM<R2 | R, E2 | E, A>
1137
+ self: STM.STM<A, E, R>,
1138
+ pf: (a: A) => Option.Option<STM.STM<E2, E2, R2>>
1139
+ ) => STM.STM<A, E2 | E, R2 | R>
1151
1140
  >(2, (self, pf) =>
1152
1141
  core.flatMap(self, (a) =>
1153
1142
  Option.match(pf(a), {
@@ -1157,11 +1146,11 @@ export const rejectSTM = dual<
1157
1146
 
1158
1147
  /** @internal */
1159
1148
  export const repeatUntil = dual<
1160
- <A>(predicate: Predicate<A>) => <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>,
1161
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>) => STM.STM<R, E, A>
1149
+ <A>(predicate: Predicate<A>) => <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E, R>,
1150
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>) => STM.STM<A, E, R>
1162
1151
  >(2, (self, predicate) => repeatUntilLoop(self, predicate))
1163
1152
 
1164
- const repeatUntilLoop = <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>): STM.STM<R, E, A> =>
1153
+ const repeatUntilLoop = <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>): STM.STM<A, E, R> =>
1165
1154
  core.flatMap(self, (a) =>
1166
1155
  predicate(a) ?
1167
1156
  core.succeed(a) :
@@ -1169,11 +1158,11 @@ const repeatUntilLoop = <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A
1169
1158
 
1170
1159
  /** @internal */
1171
1160
  export const repeatWhile = dual<
1172
- <A>(predicate: Predicate<A>) => <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>,
1173
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>) => STM.STM<R, E, A>
1161
+ <A>(predicate: Predicate<A>) => <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E, R>,
1162
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>) => STM.STM<A, E, R>
1174
1163
  >(2, (self, predicate) => repeatWhileLoop(self, predicate))
1175
1164
 
1176
- const repeatWhileLoop = <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>): STM.STM<R, E, A> =>
1165
+ const repeatWhileLoop = <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>): STM.STM<A, E, R> =>
1177
1166
  pipe(
1178
1167
  core.flatMap(self, (a) =>
1179
1168
  predicate(a) ?
@@ -1183,42 +1172,42 @@ const repeatWhileLoop = <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A
1183
1172
 
1184
1173
  /** @internal */
1185
1174
  export const replicate = dual<
1186
- (n: number) => <R, E, A>(self: STM.STM<R, E, A>) => Array<STM.STM<R, E, A>>,
1187
- <R, E, A>(self: STM.STM<R, E, A>, n: number) => Array<STM.STM<R, E, A>>
1175
+ (n: number) => <A, E, R>(self: STM.STM<A, E, R>) => Array<STM.STM<A, E, R>>,
1176
+ <A, E, R>(self: STM.STM<A, E, R>, n: number) => Array<STM.STM<A, E, R>>
1188
1177
  >(2, (self, n) => Array.from({ length: n }, () => self))
1189
1178
 
1190
1179
  /** @internal */
1191
1180
  export const replicateSTM = dual<
1192
- (n: number) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R, E, Array<A>>,
1193
- <R, E, A>(self: STM.STM<R, E, A>, n: number) => STM.STM<R, E, Array<A>>
1181
+ (n: number) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<Array<A>, E, R>,
1182
+ <A, E, R>(self: STM.STM<A, E, R>, n: number) => STM.STM<Array<A>, E, R>
1194
1183
  >(2, (self, n) => all(replicate(self, n)))
1195
1184
 
1196
1185
  /** @internal */
1197
1186
  export const replicateSTMDiscard = dual<
1198
- (n: number) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R, E, void>,
1199
- <R, E, A>(self: STM.STM<R, E, A>, n: number) => STM.STM<R, E, void>
1187
+ (n: number) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<void, E, R>,
1188
+ <A, E, R>(self: STM.STM<A, E, R>, n: number) => STM.STM<void, E, R>
1200
1189
  >(2, (self, n) => all(replicate(self, n), { discard: true }))
1201
1190
 
1202
1191
  /** @internal */
1203
1192
  export const retryUntil = dual<
1204
1193
  {
1205
- <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, B>
1206
- <A>(predicate: Predicate<A>): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>
1194
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): <R, E>(self: STM.STM<A, E, R>) => STM.STM<B, E, R>
1195
+ <A>(predicate: Predicate<A>): <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E, R>
1207
1196
  },
1208
1197
  {
1209
- <R, E, A, B extends A>(self: STM.STM<R, E, A>, refinement: Refinement<A, B>): STM.STM<R, E, B>
1210
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>): STM.STM<R, E, A>
1198
+ <R, E, A, B extends A>(self: STM.STM<A, E, R>, refinement: Refinement<A, B>): STM.STM<B, E, R>
1199
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>): STM.STM<A, E, R>
1211
1200
  }
1212
1201
  >(
1213
1202
  2,
1214
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>) =>
1203
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>) =>
1215
1204
  core.matchSTM(self, { onFailure: core.fail, onSuccess: (a) => predicate(a) ? core.succeed(a) : core.retry })
1216
1205
  )
1217
1206
 
1218
1207
  /** @internal */
1219
1208
  export const retryWhile = dual<
1220
- <A>(predicate: Predicate<A>) => <R, E>(self: STM.STM<R, E, A>) => STM.STM<R, E, A>,
1221
- <R, E, A>(self: STM.STM<R, E, A>, predicate: Predicate<A>) => STM.STM<R, E, A>
1209
+ <A>(predicate: Predicate<A>) => <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E, R>,
1210
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: Predicate<A>) => STM.STM<A, E, R>
1222
1211
  >(
1223
1212
  2,
1224
1213
  (self, predicate) =>
@@ -1228,14 +1217,14 @@ export const retryWhile = dual<
1228
1217
  /** @internal */
1229
1218
  export const partition = dual<
1230
1219
  <R, E, A, A2>(
1231
- f: (a: A) => STM.STM<R, E, A2>
1220
+ f: (a: A) => STM.STM<A2, E, R>
1232
1221
  ) => (
1233
1222
  elements: Iterable<A>
1234
- ) => STM.STM<R, never, [excluded: Array<E>, satisfying: Array<A2>]>,
1223
+ ) => STM.STM<[excluded: Array<E>, satisfying: Array<A2>], never, R>,
1235
1224
  <R, E, A, A2>(
1236
1225
  elements: Iterable<A>,
1237
- f: (a: A) => STM.STM<R, E, A2>
1238
- ) => STM.STM<R, never, [excluded: Array<E>, satisfying: Array<A2>]>
1226
+ f: (a: A) => STM.STM<A2, E, R>
1227
+ ) => STM.STM<[excluded: Array<E>, satisfying: Array<A2>], never, R>
1239
1228
  >(2, (elements, f) =>
1240
1229
  pipe(
1241
1230
  forEach(elements, (a) => either(f(a))),
@@ -1243,7 +1232,7 @@ export const partition = dual<
1243
1232
  ))
1244
1233
 
1245
1234
  /** @internal */
1246
- export const some = <R, E, A>(self: STM.STM<R, E, Option.Option<A>>): STM.STM<R, Option.Option<E>, A> =>
1235
+ export const some = <A, E, R>(self: STM.STM<Option.Option<A>, E, R>): STM.STM<A, Option.Option<E>, R> =>
1247
1236
  core.matchSTM(self, {
1248
1237
  onFailure: (e) => core.fail(Option.some(e)),
1249
1238
  onSuccess: Option.match({
@@ -1279,24 +1268,24 @@ export const all = ((
1279
1268
  }) as STM.All.Signature
1280
1269
 
1281
1270
  /** @internal */
1282
- export const succeedNone: STM.STM<never, never, Option.Option<never>> = core.succeed(Option.none())
1271
+ export const succeedNone: STM.STM<Option.Option<never>> = core.succeed(Option.none())
1283
1272
 
1284
1273
  /** @internal */
1285
- export const succeedSome = <A>(value: A): STM.STM<never, never, Option.Option<A>> => core.succeed(Option.some(value))
1274
+ export const succeedSome = <A>(value: A): STM.STM<Option.Option<A>> => core.succeed(Option.some(value))
1286
1275
 
1287
1276
  /** @internal */
1288
1277
  export const summarized = dual<
1289
1278
  <R2, E2, A2, A3>(
1290
- summary: STM.STM<R2, E2, A2>,
1279
+ summary: STM.STM<A2, E2, R2>,
1291
1280
  f: (before: A2, after: A2) => A3
1292
- ) => <R, E, A>(
1293
- self: STM.STM<R, E, A>
1294
- ) => STM.STM<R2 | R, E2 | E, [A3, A]>,
1281
+ ) => <A, E, R>(
1282
+ self: STM.STM<A, E, R>
1283
+ ) => STM.STM<[A3, A], E2 | E, R2 | R>,
1295
1284
  <R, E, A, R2, E2, A2, A3>(
1296
- self: STM.STM<R, E, A>,
1297
- summary: STM.STM<R2, E2, A2>,
1285
+ self: STM.STM<A, E, R>,
1286
+ summary: STM.STM<A2, E2, R2>,
1298
1287
  f: (before: A2, after: A2) => A3
1299
- ) => STM.STM<R2 | R, E2 | E, [A3, A]>
1288
+ ) => STM.STM<[A3, A], E2 | E, R2 | R>
1300
1289
  >(3, (self, summary, f) =>
1301
1290
  core.flatMap(summary, (start) =>
1302
1291
  core.flatMap(self, (value) =>
@@ -1306,15 +1295,15 @@ export const summarized = dual<
1306
1295
  ))))
1307
1296
 
1308
1297
  /** @internal */
1309
- export const suspend = <R, E, A>(evaluate: LazyArg<STM.STM<R, E, A>>): STM.STM<R, E, A> => flatten(core.sync(evaluate))
1298
+ export const suspend = <A, E, R>(evaluate: LazyArg<STM.STM<A, E, R>>): STM.STM<A, E, R> => flatten(core.sync(evaluate))
1310
1299
 
1311
1300
  /** @internal */
1312
1301
  export const tap: {
1313
- <A, R2, E2, _>(f: (a: A) => STM.STM<R2, E2, _>): <R, E>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E2 | E, A>
1314
- <R, E, A, R2, E2, _>(self: STM.STM<R, E, A>, f: (a: A) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A>
1302
+ <A, R2, E2, _>(f: (a: A) => STM.STM<_, E2, R2>): <R, E>(self: STM.STM<A, E, R>) => STM.STM<A, E2 | E, R2 | R>
1303
+ <R, E, A, R2, E2, _>(self: STM.STM<A, E, R>, f: (a: A) => STM.STM<_, E2, R2>): STM.STM<A, E | E2, R | R2>
1315
1304
  } = dual(
1316
1305
  2,
1317
- <R, E, A, R2, E2, _>(self: STM.STM<R, E, A>, f: (a: A) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A> =>
1306
+ <R, E, A, R2, E2, _>(self: STM.STM<A, E, R>, f: (a: A) => STM.STM<_, E2, R2>): STM.STM<A, E | E2, R | R2> =>
1318
1307
  core.flatMap(self, (a) => as(f(a), a))
1319
1308
  )
1320
1309
 
@@ -1322,19 +1311,19 @@ export const tap: {
1322
1311
  export const tapBoth = dual<
1323
1312
  <E, XE extends E, R2, E2, A2, A, XA extends A, R3, E3, A3>(
1324
1313
  options: {
1325
- readonly onFailure: (error: XE) => STM.STM<R2, E2, A2>
1326
- readonly onSuccess: (value: XA) => STM.STM<R3, E3, A3>
1314
+ readonly onFailure: (error: XE) => STM.STM<A2, E2, R2>
1315
+ readonly onSuccess: (value: XA) => STM.STM<A3, E3, R3>
1327
1316
  }
1328
1317
  ) => <R>(
1329
- self: STM.STM<R, E, A>
1330
- ) => STM.STM<R2 | R3 | R, E | E2 | E3, A>,
1318
+ self: STM.STM<A, E, R>
1319
+ ) => STM.STM<A, E | E2 | E3, R2 | R3 | R>,
1331
1320
  <R, E, XE extends E, R2, E2, A2, A, XA extends A, R3, E3, A3>(
1332
- self: STM.STM<R, E, A>,
1321
+ self: STM.STM<A, E, R>,
1333
1322
  options: {
1334
- readonly onFailure: (error: XE) => STM.STM<R2, E2, A2>
1335
- readonly onSuccess: (value: XA) => STM.STM<R3, E3, A3>
1323
+ readonly onFailure: (error: XE) => STM.STM<A2, E2, R2>
1324
+ readonly onSuccess: (value: XA) => STM.STM<A3, E3, R3>
1336
1325
  }
1337
- ) => STM.STM<R2 | R3 | R, E | E2 | E3, A>
1326
+ ) => STM.STM<A, E | E2 | E3, R2 | R3 | R>
1338
1327
  >(2, (self, { onFailure, onSuccess }) =>
1339
1328
  core.matchSTM(self, {
1340
1329
  onFailure: (e) => pipe(onFailure(e as any), core.zipRight(core.fail(e))),
@@ -1344,12 +1333,12 @@ export const tapBoth = dual<
1344
1333
  /** @internal */
1345
1334
  export const tapError: {
1346
1335
  <E, R2, E2, _>(
1347
- f: (error: NoInfer<E>) => STM.STM<R2, E2, _>
1348
- ): <R, A>(self: STM.STM<R, E, A>) => STM.STM<R2 | R, E | E2, A>
1349
- <R, A, E, R2, E2, _>(self: STM.STM<R, E, A>, f: (error: E) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A>
1336
+ f: (error: NoInfer<E>) => STM.STM<_, E2, R2>
1337
+ ): <R, A>(self: STM.STM<A, E, R>) => STM.STM<A, E | E2, R2 | R>
1338
+ <R, A, E, R2, E2, _>(self: STM.STM<A, E, R>, f: (error: E) => STM.STM<_, E2, R2>): STM.STM<A, E | E2, R | R2>
1350
1339
  } = dual(
1351
1340
  2,
1352
- <R, A, E, R2, E2, _>(self: STM.STM<R, E, A>, f: (error: E) => STM.STM<R2, E2, _>): STM.STM<R | R2, E | E2, A> =>
1341
+ <R, A, E, R2, E2, _>(self: STM.STM<A, E, R>, f: (error: E) => STM.STM<_, E2, R2>): STM.STM<A, E | E2, R | R2> =>
1353
1342
  core.matchSTM(self, {
1354
1343
  onFailure: (e) => core.zipRight(f(e), core.fail(e)),
1355
1344
  onSuccess: core.succeed
@@ -1361,8 +1350,8 @@ export const try_: {
1361
1350
  <A, E>(options: {
1362
1351
  readonly try: LazyArg<A>
1363
1352
  readonly catch: (u: unknown) => E
1364
- }): STM.STM<never, E, A>
1365
- <A>(try_: LazyArg<A>): STM.STM<never, unknown, A>
1353
+ }): STM.STM<A, E>
1354
+ <A>(try_: LazyArg<A>): STM.STM<A, unknown>
1366
1355
  } = <A, E>(
1367
1356
  arg: LazyArg<A> | {
1368
1357
  readonly try: LazyArg<A>
@@ -1380,12 +1369,12 @@ export const try_: {
1380
1369
  }
1381
1370
 
1382
1371
  /** @internal */
1383
- export const unit: STM.STM<never, never, void> = core.succeed(void 0)
1372
+ export const unit: STM.STM<void> = core.succeed(void 0)
1384
1373
 
1385
1374
  /** @internal */
1386
1375
  export const unless = dual<
1387
- (predicate: LazyArg<boolean>) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R, E, Option.Option<A>>,
1388
- <R, E, A>(self: STM.STM<R, E, A>, predicate: LazyArg<boolean>) => STM.STM<R, E, Option.Option<A>>
1376
+ (predicate: LazyArg<boolean>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<Option.Option<A>, E, R>,
1377
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: LazyArg<boolean>) => STM.STM<Option.Option<A>, E, R>
1389
1378
  >(2, (self, predicate) =>
1390
1379
  suspend(
1391
1380
  () => predicate() ? succeedNone : asSome(self)
@@ -1394,14 +1383,14 @@ export const unless = dual<
1394
1383
  /** @internal */
1395
1384
  export const unlessSTM = dual<
1396
1385
  <R2, E2>(
1397
- predicate: STM.STM<R2, E2, boolean>
1398
- ) => <R, E, A>(
1399
- self: STM.STM<R, E, A>
1400
- ) => STM.STM<R2 | R, E2 | E, Option.Option<A>>,
1386
+ predicate: STM.STM<boolean, E2, R2>
1387
+ ) => <A, E, R>(
1388
+ self: STM.STM<A, E, R>
1389
+ ) => STM.STM<Option.Option<A>, E2 | E, R2 | R>,
1401
1390
  <R, E, A, R2, E2>(
1402
- self: STM.STM<R, E, A>,
1403
- predicate: STM.STM<R2, E2, boolean>
1404
- ) => STM.STM<R2 | R, E2 | E, Option.Option<A>>
1391
+ self: STM.STM<A, E, R>,
1392
+ predicate: STM.STM<boolean, E2, R2>
1393
+ ) => STM.STM<Option.Option<A>, E2 | E, R2 | R>
1405
1394
  >(2, (self, predicate) =>
1406
1395
  core.flatMap(
1407
1396
  predicate,
@@ -1409,7 +1398,7 @@ export const unlessSTM = dual<
1409
1398
  ))
1410
1399
 
1411
1400
  /** @internal */
1412
- export const unsome = <R, E, A>(self: STM.STM<R, Option.Option<E>, A>): STM.STM<R, E, Option.Option<A>> =>
1401
+ export const unsome = <A, E, R>(self: STM.STM<A, Option.Option<E>, R>): STM.STM<Option.Option<A>, E, R> =>
1413
1402
  core.matchSTM(self, {
1414
1403
  onFailure: Option.match({
1415
1404
  onNone: () => core.succeed(Option.none()),
@@ -1421,14 +1410,14 @@ export const unsome = <R, E, A>(self: STM.STM<R, Option.Option<E>, A>): STM.STM<
1421
1410
  /** @internal */
1422
1411
  export const validateAll = dual<
1423
1412
  <R, E, A, B>(
1424
- f: (a: A) => STM.STM<R, E, B>
1413
+ f: (a: A) => STM.STM<B, E, R>
1425
1414
  ) => (
1426
1415
  elements: Iterable<A>
1427
- ) => STM.STM<R, RA.NonEmptyArray<E>, Array<B>>,
1416
+ ) => STM.STM<Array<B>, RA.NonEmptyArray<E>, R>,
1428
1417
  <R, E, A, B>(
1429
1418
  elements: Iterable<A>,
1430
- f: (a: A) => STM.STM<R, E, B>
1431
- ) => STM.STM<R, RA.NonEmptyArray<E>, Array<B>>
1419
+ f: (a: A) => STM.STM<B, E, R>
1420
+ ) => STM.STM<Array<B>, RA.NonEmptyArray<E>, R>
1432
1421
  >(
1433
1422
  2,
1434
1423
  (elements, f) =>
@@ -1440,14 +1429,14 @@ export const validateAll = dual<
1440
1429
 
1441
1430
  /** @internal */
1442
1431
  export const validateFirst = dual<
1443
- <R, E, A, B>(f: (a: A) => STM.STM<R, E, B>) => (elements: Iterable<A>) => STM.STM<R, Array<E>, B>,
1444
- <R, E, A, B>(elements: Iterable<A>, f: (a: A) => STM.STM<R, E, B>) => STM.STM<R, Array<E>, B>
1432
+ <R, E, A, B>(f: (a: A) => STM.STM<B, E, R>) => (elements: Iterable<A>) => STM.STM<B, Array<E>, R>,
1433
+ <R, E, A, B>(elements: Iterable<A>, f: (a: A) => STM.STM<B, E, R>) => STM.STM<B, Array<E>, R>
1445
1434
  >(2, (elements, f) => flip(forEach(elements, (a) => flip(f(a)))))
1446
1435
 
1447
1436
  /** @internal */
1448
1437
  export const when = dual<
1449
- (predicate: LazyArg<boolean>) => <R, E, A>(self: STM.STM<R, E, A>) => STM.STM<R, E, Option.Option<A>>,
1450
- <R, E, A>(self: STM.STM<R, E, A>, predicate: LazyArg<boolean>) => STM.STM<R, E, Option.Option<A>>
1438
+ (predicate: LazyArg<boolean>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<Option.Option<A>, E, R>,
1439
+ <A, E, R>(self: STM.STM<A, E, R>, predicate: LazyArg<boolean>) => STM.STM<Option.Option<A>, E, R>
1451
1440
  >(2, (self, predicate) =>
1452
1441
  suspend(
1453
1442
  () => predicate() ? asSome(self) : succeedNone
@@ -1456,14 +1445,14 @@ export const when = dual<
1456
1445
  /** @internal */
1457
1446
  export const whenSTM = dual<
1458
1447
  <R2, E2>(
1459
- predicate: STM.STM<R2, E2, boolean>
1460
- ) => <R, E, A>(
1461
- self: STM.STM<R, E, A>
1462
- ) => STM.STM<R2 | R, E2 | E, Option.Option<A>>,
1448
+ predicate: STM.STM<boolean, E2, R2>
1449
+ ) => <A, E, R>(
1450
+ self: STM.STM<A, E, R>
1451
+ ) => STM.STM<Option.Option<A>, E2 | E, R2 | R>,
1463
1452
  <R, E, A, R2, E2>(
1464
- self: STM.STM<R, E, A>,
1465
- predicate: STM.STM<R2, E2, boolean>
1466
- ) => STM.STM<R2 | R, E2 | E, Option.Option<A>>
1453
+ self: STM.STM<A, E, R>,
1454
+ predicate: STM.STM<boolean, E2, R2>
1455
+ ) => STM.STM<Option.Option<A>, E2 | E, R2 | R>
1467
1456
  >(2, (self, predicate) =>
1468
1457
  core.flatMap(
1469
1458
  predicate,