effect 2.3.7 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/dist/cjs/BigDecimal.js +1 -1
  2. package/dist/cjs/BigDecimal.js.map +1 -1
  3. package/dist/cjs/BigInt.js +14 -1
  4. package/dist/cjs/BigInt.js.map +1 -1
  5. package/dist/cjs/Chunk.js +1 -1
  6. package/dist/cjs/Chunk.js.map +1 -1
  7. package/dist/cjs/Cron.js +1 -1
  8. package/dist/cjs/Cron.js.map +1 -1
  9. package/dist/cjs/Duration.js +1 -1
  10. package/dist/cjs/Duration.js.map +1 -1
  11. package/dist/cjs/Effect.js +16 -61
  12. package/dist/cjs/Effect.js.map +1 -1
  13. package/dist/cjs/Either.js +35 -6
  14. package/dist/cjs/Either.js.map +1 -1
  15. package/dist/cjs/Equal.js +1 -1
  16. package/dist/cjs/Equal.js.map +1 -1
  17. package/dist/cjs/Exit.js +1 -1
  18. package/dist/cjs/FiberMap.js.map +1 -1
  19. package/dist/cjs/Hash.js +29 -1
  20. package/dist/cjs/Hash.js.map +1 -1
  21. package/dist/cjs/List.js +3 -2
  22. package/dist/cjs/List.js.map +1 -1
  23. package/dist/cjs/Number.js +25 -1
  24. package/dist/cjs/Number.js.map +1 -1
  25. package/dist/cjs/ReadonlyArray.js +2 -2
  26. package/dist/cjs/ReadonlyArray.js.map +1 -1
  27. package/dist/cjs/ReadonlyRecord.js +71 -76
  28. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  29. package/dist/cjs/STM.js.map +1 -1
  30. package/dist/cjs/Schedule.js.map +1 -1
  31. package/dist/cjs/Sink.js.map +1 -1
  32. package/dist/cjs/SortedMap.js +1 -1
  33. package/dist/cjs/SortedMap.js.map +1 -1
  34. package/dist/cjs/SortedSet.js +1 -1
  35. package/dist/cjs/SortedSet.js.map +1 -1
  36. package/dist/cjs/Stream.js +3 -23
  37. package/dist/cjs/Stream.js.map +1 -1
  38. package/dist/cjs/Struct.js +3 -1
  39. package/dist/cjs/Struct.js.map +1 -1
  40. package/dist/cjs/TestAnnotation.js +1 -1
  41. package/dist/cjs/TestAnnotation.js.map +1 -1
  42. package/dist/cjs/internal/cache.js +1 -1
  43. package/dist/cjs/internal/cache.js.map +1 -1
  44. package/dist/cjs/internal/cause.js +1 -1
  45. package/dist/cjs/internal/cause.js.map +1 -1
  46. package/dist/cjs/internal/channel/channelExecutor.js +5 -5
  47. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  48. package/dist/cjs/internal/channel/channelState.js +5 -5
  49. package/dist/cjs/internal/channel/channelState.js.map +1 -1
  50. package/dist/cjs/internal/channel.js.map +1 -1
  51. package/dist/cjs/internal/clock.js +3 -4
  52. package/dist/cjs/internal/clock.js.map +1 -1
  53. package/dist/cjs/internal/context.js +1 -1
  54. package/dist/cjs/internal/context.js.map +1 -1
  55. package/dist/cjs/internal/core-effect.js +6 -23
  56. package/dist/cjs/internal/core-effect.js.map +1 -1
  57. package/dist/cjs/internal/core.js +15 -31
  58. package/dist/cjs/internal/core.js.map +1 -1
  59. package/dist/cjs/internal/data.js +1 -1
  60. package/dist/cjs/internal/data.js.map +1 -1
  61. package/dist/cjs/internal/effect/circular.js +5 -6
  62. package/dist/cjs/internal/effect/circular.js.map +1 -1
  63. package/dist/cjs/internal/effectable.js +2 -2
  64. package/dist/cjs/internal/effectable.js.map +1 -1
  65. package/dist/cjs/internal/either.js +1 -1
  66. package/dist/cjs/internal/either.js.map +1 -1
  67. package/dist/cjs/internal/fiberId.js +2 -9
  68. package/dist/cjs/internal/fiberId.js.map +1 -1
  69. package/dist/cjs/internal/fiberStatus.js +4 -3
  70. package/dist/cjs/internal/fiberStatus.js.map +1 -1
  71. package/dist/cjs/internal/groupBy.js.map +1 -1
  72. package/dist/cjs/internal/hashMap.js +1 -1
  73. package/dist/cjs/internal/hashMap.js.map +1 -1
  74. package/dist/cjs/internal/hashSet.js +1 -1
  75. package/dist/cjs/internal/hashSet.js.map +1 -1
  76. package/dist/cjs/internal/keyedPool.js +2 -2
  77. package/dist/cjs/internal/keyedPool.js.map +1 -1
  78. package/dist/cjs/internal/layer.js +0 -2
  79. package/dist/cjs/internal/layer.js.map +1 -1
  80. package/dist/cjs/internal/metric/keyType.js +4 -4
  81. package/dist/cjs/internal/metric/keyType.js.map +1 -1
  82. package/dist/cjs/internal/metric/state.js +5 -9
  83. package/dist/cjs/internal/metric/state.js.map +1 -1
  84. package/dist/cjs/internal/option.js +1 -1
  85. package/dist/cjs/internal/option.js.map +1 -1
  86. package/dist/cjs/internal/pool.js +1 -1
  87. package/dist/cjs/internal/pool.js.map +1 -1
  88. package/dist/cjs/internal/redBlackTree.js +1 -1
  89. package/dist/cjs/internal/redBlackTree.js.map +1 -1
  90. package/dist/cjs/internal/runtime.js +12 -1
  91. package/dist/cjs/internal/runtime.js.map +1 -1
  92. package/dist/cjs/internal/schedule.js +4 -4
  93. package/dist/cjs/internal/schedule.js.map +1 -1
  94. package/dist/cjs/internal/secret.js +1 -1
  95. package/dist/cjs/internal/secret.js.map +1 -1
  96. package/dist/cjs/internal/sink.js +0 -2
  97. package/dist/cjs/internal/sink.js.map +1 -1
  98. package/dist/cjs/internal/stm/core.js +1 -1
  99. package/dist/cjs/internal/stm/core.js.map +1 -1
  100. package/dist/cjs/internal/stm/stm/stmState.js +6 -4
  101. package/dist/cjs/internal/stm/stm/stmState.js.map +1 -1
  102. package/dist/cjs/internal/stm/stm/tExit.js +7 -6
  103. package/dist/cjs/internal/stm/stm/tExit.js.map +1 -1
  104. package/dist/cjs/internal/stm/stm.js +1 -0
  105. package/dist/cjs/internal/stm/stm.js.map +1 -1
  106. package/dist/cjs/internal/stream.js +51 -64
  107. package/dist/cjs/internal/stream.js.map +1 -1
  108. package/dist/cjs/internal/trie.js +1 -1
  109. package/dist/cjs/internal/trie.js.map +1 -1
  110. package/dist/cjs/internal/version.js +1 -1
  111. package/dist/dts/BigDecimal.d.ts.map +1 -1
  112. package/dist/dts/BigInt.d.ts +7 -0
  113. package/dist/dts/BigInt.d.ts.map +1 -1
  114. package/dist/dts/Brand.d.ts +1 -1
  115. package/dist/dts/Brand.d.ts.map +1 -1
  116. package/dist/dts/Cause.d.ts +1 -1
  117. package/dist/dts/Cause.d.ts.map +1 -1
  118. package/dist/dts/Channel.d.ts +11 -11
  119. package/dist/dts/Channel.d.ts.map +1 -1
  120. package/dist/dts/Chunk.d.ts +3 -3
  121. package/dist/dts/Config.d.ts +4 -4
  122. package/dist/dts/Config.d.ts.map +1 -1
  123. package/dist/dts/Cron.d.ts +1 -1
  124. package/dist/dts/Cron.d.ts.map +1 -1
  125. package/dist/dts/Differ.d.ts +2 -2
  126. package/dist/dts/Differ.d.ts.map +1 -1
  127. package/dist/dts/Effect.d.ts +52 -108
  128. package/dist/dts/Effect.d.ts.map +1 -1
  129. package/dist/dts/Either.d.ts +126 -83
  130. package/dist/dts/Either.d.ts.map +1 -1
  131. package/dist/dts/Encoding.d.ts +6 -6
  132. package/dist/dts/Encoding.d.ts.map +1 -1
  133. package/dist/dts/Equal.d.ts.map +1 -1
  134. package/dist/dts/Exit.d.ts +2 -2
  135. package/dist/dts/Fiber.d.ts +2 -2
  136. package/dist/dts/Fiber.d.ts.map +1 -1
  137. package/dist/dts/FiberMap.d.ts +4 -5
  138. package/dist/dts/FiberMap.d.ts.map +1 -1
  139. package/dist/dts/GroupBy.d.ts +12 -12
  140. package/dist/dts/GroupBy.d.ts.map +1 -1
  141. package/dist/dts/Hash.d.ts +8 -0
  142. package/dist/dts/Hash.d.ts.map +1 -1
  143. package/dist/dts/Layer.d.ts +26 -26
  144. package/dist/dts/Layer.d.ts.map +1 -1
  145. package/dist/dts/List.d.ts +2 -2
  146. package/dist/dts/List.d.ts.map +1 -1
  147. package/dist/dts/Logger.d.ts +4 -4
  148. package/dist/dts/Match.d.ts +2 -2
  149. package/dist/dts/Match.d.ts.map +1 -1
  150. package/dist/dts/MergeDecision.d.ts +1 -1
  151. package/dist/dts/MergeState.d.ts +5 -5
  152. package/dist/dts/MergeState.d.ts.map +1 -1
  153. package/dist/dts/Metric.d.ts +13 -13
  154. package/dist/dts/Metric.d.ts.map +1 -1
  155. package/dist/dts/MetricPolling.d.ts +4 -4
  156. package/dist/dts/MetricPolling.d.ts.map +1 -1
  157. package/dist/dts/Number.d.ts +8 -0
  158. package/dist/dts/Number.d.ts.map +1 -1
  159. package/dist/dts/Option.d.ts +11 -11
  160. package/dist/dts/ReadonlyArray.d.ts +9 -8
  161. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  162. package/dist/dts/ReadonlyRecord.d.ts +111 -94
  163. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  164. package/dist/dts/Reloadable.d.ts +4 -4
  165. package/dist/dts/Reloadable.d.ts.map +1 -1
  166. package/dist/dts/RequestResolver.d.ts +13 -13
  167. package/dist/dts/RequestResolver.d.ts.map +1 -1
  168. package/dist/dts/Resource.d.ts +1 -1
  169. package/dist/dts/Resource.d.ts.map +1 -1
  170. package/dist/dts/STM.d.ts +144 -139
  171. package/dist/dts/STM.d.ts.map +1 -1
  172. package/dist/dts/Schedule.d.ts +171 -179
  173. package/dist/dts/Schedule.d.ts.map +1 -1
  174. package/dist/dts/SingleProducerAsyncInput.d.ts +1 -1
  175. package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -1
  176. package/dist/dts/Sink.d.ts +13 -13
  177. package/dist/dts/Sink.d.ts.map +1 -1
  178. package/dist/dts/SortedMap.d.ts.map +1 -1
  179. package/dist/dts/SortedSet.d.ts.map +1 -1
  180. package/dist/dts/Stream.d.ts +355 -366
  181. package/dist/dts/Stream.d.ts.map +1 -1
  182. package/dist/dts/Struct.d.ts +3 -3
  183. package/dist/dts/Struct.d.ts.map +1 -1
  184. package/dist/dts/SubscriptionRef.d.ts +2 -2
  185. package/dist/dts/TArray.d.ts +2 -2
  186. package/dist/dts/TDeferred.d.ts +3 -3
  187. package/dist/dts/TMap.d.ts +10 -10
  188. package/dist/dts/TSet.d.ts +4 -4
  189. package/dist/dts/Take.d.ts +2 -2
  190. package/dist/dts/TestAnnotation.d.ts +2 -2
  191. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  192. package/dist/dts/Types.d.ts +7 -0
  193. package/dist/dts/Types.d.ts.map +1 -1
  194. package/dist/dts/internal/metric/keyType.d.ts.map +1 -1
  195. package/dist/dts/internal/metric/state.d.ts.map +1 -1
  196. package/dist/dts/internal/stm/stm.d.ts +2 -15
  197. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  198. package/dist/esm/BigDecimal.js +1 -1
  199. package/dist/esm/BigDecimal.js.map +1 -1
  200. package/dist/esm/BigInt.js +12 -0
  201. package/dist/esm/BigInt.js.map +1 -1
  202. package/dist/esm/Chunk.js +1 -1
  203. package/dist/esm/Chunk.js.map +1 -1
  204. package/dist/esm/Cron.js +1 -1
  205. package/dist/esm/Cron.js.map +1 -1
  206. package/dist/esm/Duration.js +1 -1
  207. package/dist/esm/Duration.js.map +1 -1
  208. package/dist/esm/Effect.js +13 -58
  209. package/dist/esm/Effect.js.map +1 -1
  210. package/dist/esm/Either.js +42 -5
  211. package/dist/esm/Either.js.map +1 -1
  212. package/dist/esm/Equal.js +1 -1
  213. package/dist/esm/Equal.js.map +1 -1
  214. package/dist/esm/Exit.js +1 -1
  215. package/dist/esm/FiberMap.js.map +1 -1
  216. package/dist/esm/Hash.js +27 -0
  217. package/dist/esm/Hash.js.map +1 -1
  218. package/dist/esm/List.js +3 -2
  219. package/dist/esm/List.js.map +1 -1
  220. package/dist/esm/Number.js +23 -0
  221. package/dist/esm/Number.js.map +1 -1
  222. package/dist/esm/ReadonlyArray.js +2 -2
  223. package/dist/esm/ReadonlyArray.js.map +1 -1
  224. package/dist/esm/ReadonlyRecord.js +70 -75
  225. package/dist/esm/ReadonlyRecord.js.map +1 -1
  226. package/dist/esm/STM.js.map +1 -1
  227. package/dist/esm/Schedule.js.map +1 -1
  228. package/dist/esm/Sink.js.map +1 -1
  229. package/dist/esm/SortedMap.js +1 -1
  230. package/dist/esm/SortedMap.js.map +1 -1
  231. package/dist/esm/SortedSet.js +1 -1
  232. package/dist/esm/SortedSet.js.map +1 -1
  233. package/dist/esm/Stream.js +5 -22
  234. package/dist/esm/Stream.js.map +1 -1
  235. package/dist/esm/Struct.js +3 -1
  236. package/dist/esm/Struct.js.map +1 -1
  237. package/dist/esm/TestAnnotation.js +1 -1
  238. package/dist/esm/TestAnnotation.js.map +1 -1
  239. package/dist/esm/internal/cache.js +1 -1
  240. package/dist/esm/internal/cache.js.map +1 -1
  241. package/dist/esm/internal/cause.js +1 -1
  242. package/dist/esm/internal/cause.js.map +1 -1
  243. package/dist/esm/internal/channel/channelExecutor.js +5 -5
  244. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  245. package/dist/esm/internal/channel/channelState.js +3 -3
  246. package/dist/esm/internal/channel/channelState.js.map +1 -1
  247. package/dist/esm/internal/channel.js.map +1 -1
  248. package/dist/esm/internal/clock.js +3 -4
  249. package/dist/esm/internal/clock.js.map +1 -1
  250. package/dist/esm/internal/context.js +1 -1
  251. package/dist/esm/internal/context.js.map +1 -1
  252. package/dist/esm/internal/core-effect.js +4 -20
  253. package/dist/esm/internal/core-effect.js.map +1 -1
  254. package/dist/esm/internal/core.js +12 -26
  255. package/dist/esm/internal/core.js.map +1 -1
  256. package/dist/esm/internal/data.js +1 -1
  257. package/dist/esm/internal/data.js.map +1 -1
  258. package/dist/esm/internal/effect/circular.js +5 -6
  259. package/dist/esm/internal/effect/circular.js.map +1 -1
  260. package/dist/esm/internal/effectable.js +2 -2
  261. package/dist/esm/internal/effectable.js.map +1 -1
  262. package/dist/esm/internal/either.js +1 -1
  263. package/dist/esm/internal/either.js.map +1 -1
  264. package/dist/esm/internal/fiberId.js +2 -9
  265. package/dist/esm/internal/fiberId.js.map +1 -1
  266. package/dist/esm/internal/fiberStatus.js +4 -3
  267. package/dist/esm/internal/fiberStatus.js.map +1 -1
  268. package/dist/esm/internal/groupBy.js.map +1 -1
  269. package/dist/esm/internal/hashMap.js +1 -1
  270. package/dist/esm/internal/hashMap.js.map +1 -1
  271. package/dist/esm/internal/hashSet.js +1 -1
  272. package/dist/esm/internal/hashSet.js.map +1 -1
  273. package/dist/esm/internal/keyedPool.js +2 -2
  274. package/dist/esm/internal/keyedPool.js.map +1 -1
  275. package/dist/esm/internal/layer.js +0 -2
  276. package/dist/esm/internal/layer.js.map +1 -1
  277. package/dist/esm/internal/metric/keyType.js +4 -4
  278. package/dist/esm/internal/metric/keyType.js.map +1 -1
  279. package/dist/esm/internal/metric/state.js +5 -9
  280. package/dist/esm/internal/metric/state.js.map +1 -1
  281. package/dist/esm/internal/option.js +1 -1
  282. package/dist/esm/internal/option.js.map +1 -1
  283. package/dist/esm/internal/pool.js +1 -1
  284. package/dist/esm/internal/pool.js.map +1 -1
  285. package/dist/esm/internal/redBlackTree.js +1 -1
  286. package/dist/esm/internal/redBlackTree.js.map +1 -1
  287. package/dist/esm/internal/runtime.js +12 -1
  288. package/dist/esm/internal/runtime.js.map +1 -1
  289. package/dist/esm/internal/schedule.js +4 -4
  290. package/dist/esm/internal/schedule.js.map +1 -1
  291. package/dist/esm/internal/secret.js +1 -1
  292. package/dist/esm/internal/secret.js.map +1 -1
  293. package/dist/esm/internal/sink.js +0 -2
  294. package/dist/esm/internal/sink.js.map +1 -1
  295. package/dist/esm/internal/stm/core.js +1 -1
  296. package/dist/esm/internal/stm/core.js.map +1 -1
  297. package/dist/esm/internal/stm/stm/stmState.js +5 -3
  298. package/dist/esm/internal/stm/stm/stmState.js.map +1 -1
  299. package/dist/esm/internal/stm/stm/tExit.js +6 -5
  300. package/dist/esm/internal/stm/stm/tExit.js.map +1 -1
  301. package/dist/esm/internal/stm/stm.js +1 -0
  302. package/dist/esm/internal/stm/stm.js.map +1 -1
  303. package/dist/esm/internal/stream.js +49 -59
  304. package/dist/esm/internal/stream.js.map +1 -1
  305. package/dist/esm/internal/trie.js +1 -1
  306. package/dist/esm/internal/trie.js.map +1 -1
  307. package/dist/esm/internal/version.js +1 -1
  308. package/package.json +3 -2
  309. package/src/BigDecimal.ts +2 -1
  310. package/src/BigInt.ts +13 -0
  311. package/src/Brand.ts +4 -4
  312. package/src/Cause.ts +1 -1
  313. package/src/Channel.ts +17 -17
  314. package/src/Chunk.ts +5 -5
  315. package/src/Config.ts +4 -4
  316. package/src/Cron.ts +4 -3
  317. package/src/Differ.ts +2 -2
  318. package/src/Duration.ts +2 -2
  319. package/src/Effect.ts +68 -145
  320. package/src/Either.ts +215 -133
  321. package/src/Encoding.ts +3 -3
  322. package/src/Equal.ts +1 -1
  323. package/src/Exit.ts +2 -2
  324. package/src/Fiber.ts +2 -2
  325. package/src/FiberMap.ts +0 -1
  326. package/src/GroupBy.ts +16 -16
  327. package/src/Hash.ts +31 -0
  328. package/src/Layer.ts +32 -32
  329. package/src/List.ts +6 -5
  330. package/src/Logger.ts +4 -4
  331. package/src/Match.ts +3 -3
  332. package/src/MergeDecision.ts +1 -1
  333. package/src/MergeState.ts +8 -8
  334. package/src/Metric.ts +13 -13
  335. package/src/MetricPolling.ts +9 -9
  336. package/src/Number.ts +26 -0
  337. package/src/Option.ts +17 -17
  338. package/src/ReadonlyArray.ts +23 -15
  339. package/src/ReadonlyRecord.ts +421 -265
  340. package/src/Reloadable.ts +4 -4
  341. package/src/RequestResolver.ts +19 -19
  342. package/src/Resource.ts +3 -3
  343. package/src/STM.ts +166 -213
  344. package/src/Schedule.ts +331 -361
  345. package/src/SingleProducerAsyncInput.ts +1 -1
  346. package/src/Sink.ts +19 -19
  347. package/src/SortedMap.ts +5 -1
  348. package/src/SortedSet.ts +5 -1
  349. package/src/Stream.ts +449 -456
  350. package/src/Struct.ts +8 -5
  351. package/src/SubscriptionRef.ts +2 -2
  352. package/src/TArray.ts +2 -2
  353. package/src/TDeferred.ts +4 -4
  354. package/src/TMap.ts +10 -10
  355. package/src/TSet.ts +4 -4
  356. package/src/Take.ts +4 -4
  357. package/src/TestAnnotation.ts +7 -9
  358. package/src/Types.ts +11 -0
  359. package/src/internal/blockedRequests.ts +2 -2
  360. package/src/internal/cache.ts +2 -1
  361. package/src/internal/cause.ts +4 -3
  362. package/src/internal/channel/channelExecutor.ts +26 -26
  363. package/src/internal/channel/channelState.ts +13 -13
  364. package/src/internal/channel/mergeDecision.ts +1 -1
  365. package/src/internal/channel/mergeState.ts +6 -6
  366. package/src/internal/channel/singleProducerAsyncInput.ts +5 -5
  367. package/src/internal/channel.ts +43 -43
  368. package/src/internal/clock.ts +3 -4
  369. package/src/internal/config.ts +7 -7
  370. package/src/internal/configError.ts +1 -1
  371. package/src/internal/configProvider/pathPatch.ts +2 -2
  372. package/src/internal/configProvider.ts +1 -1
  373. package/src/internal/context.ts +1 -1
  374. package/src/internal/core-effect.ts +28 -43
  375. package/src/internal/core.ts +19 -44
  376. package/src/internal/data.ts +1 -1
  377. package/src/internal/dataSource.ts +26 -26
  378. package/src/internal/differ/orPatch.ts +7 -7
  379. package/src/internal/differ.ts +2 -2
  380. package/src/internal/effect/circular.ts +10 -11
  381. package/src/internal/effectable.ts +3 -3
  382. package/src/internal/either.ts +23 -20
  383. package/src/internal/encoding/base64.ts +1 -1
  384. package/src/internal/encoding/base64Url.ts +1 -1
  385. package/src/internal/encoding/hex.ts +1 -1
  386. package/src/internal/fiber.ts +2 -2
  387. package/src/internal/fiberId.ts +7 -13
  388. package/src/internal/fiberRuntime.ts +9 -9
  389. package/src/internal/fiberStatus.ts +7 -6
  390. package/src/internal/groupBy.ts +40 -40
  391. package/src/internal/hashMap.ts +2 -2
  392. package/src/internal/hashSet.ts +4 -1
  393. package/src/internal/keyedPool.ts +4 -2
  394. package/src/internal/layer/circular.ts +4 -4
  395. package/src/internal/layer.ts +52 -54
  396. package/src/internal/matcher.ts +5 -5
  397. package/src/internal/metric/keyType.ts +7 -5
  398. package/src/internal/metric/polling.ts +8 -8
  399. package/src/internal/metric/state.ts +11 -10
  400. package/src/internal/metric.ts +6 -6
  401. package/src/internal/option.ts +1 -1
  402. package/src/internal/pool.ts +2 -1
  403. package/src/internal/redBlackTree.ts +2 -2
  404. package/src/internal/reloadable.ts +4 -4
  405. package/src/internal/resource.ts +2 -2
  406. package/src/internal/runtime.ts +32 -19
  407. package/src/internal/schedule.ts +430 -500
  408. package/src/internal/secret.ts +2 -1
  409. package/src/internal/sink.ts +27 -29
  410. package/src/internal/stm/core.ts +24 -24
  411. package/src/internal/stm/stm/stmState.ts +16 -11
  412. package/src/internal/stm/stm/tExit.ts +15 -9
  413. package/src/internal/stm/stm.ts +158 -157
  414. package/src/internal/stm/tArray.ts +3 -3
  415. package/src/internal/stm/tDeferred.ts +5 -5
  416. package/src/internal/stm/tMap.ts +13 -13
  417. package/src/internal/stm/tSet.ts +4 -4
  418. package/src/internal/stream.ts +688 -723
  419. package/src/internal/subscriptionRef.ts +3 -3
  420. package/src/internal/take.ts +6 -6
  421. package/src/internal/trie.ts +2 -2
  422. package/src/internal/version.ts +1 -1
@@ -158,7 +158,7 @@ class EffectPrimitive {
158
158
  return this === that
159
159
  }
160
160
  [Hash.symbol](this: {}) {
161
- return Hash.random(this)
161
+ return Hash.cached(this, Hash.random(this))
162
162
  }
163
163
  pipe() {
164
164
  return pipeArguments(this, arguments)
@@ -195,7 +195,7 @@ class EffectPrimitiveFailure {
195
195
  return this === that
196
196
  }
197
197
  [Hash.symbol](this: {}) {
198
- return Hash.random(this)
198
+ return Hash.cached(this, Hash.random(this))
199
199
  }
200
200
  get cause() {
201
201
  return this.i0
@@ -233,7 +233,7 @@ class EffectPrimitiveSuccess {
233
233
  return this === that
234
234
  }
235
235
  [Hash.symbol](this: {}) {
236
- return Hash.random(this)
236
+ return Hash.cached(this, Hash.random(this))
237
237
  }
238
238
  get value() {
239
239
  return this.i0
@@ -480,22 +480,6 @@ export const async = <A, E = never, R = never>(
480
480
  effect
481
481
  })
482
482
 
483
- /* @internal */
484
- export const asyncEither = <A, E = never, R = never>(
485
- register: (
486
- resume: (effect: Effect.Effect<A, E, R>) => void
487
- ) => Either.Either<Effect.Effect<void, never, R>, Effect.Effect<A, E, R>>,
488
- blockingOn: FiberId.FiberId = FiberId.none
489
- ): Effect.Effect<A, E, R> =>
490
- async<A, E, R>((resume) => {
491
- const result = register(resume)
492
- if (Either.isRight(result)) {
493
- resume(result.right)
494
- } else {
495
- return result.left
496
- }
497
- }, blockingOn)
498
-
499
483
  /* @internal */
500
484
  export const catchAllCause = dual<
501
485
  <E, A2, E2, R2>(
@@ -530,15 +514,6 @@ export const catchAll: {
530
514
  ): Effect.Effect<A2 | A, E2, R2 | R> => matchEffect(self, { onFailure: f, onSuccess: succeed })
531
515
  )
532
516
 
533
- /**
534
- * @macro identity
535
- * @internal
536
- */
537
- export const unified = <Args extends ReadonlyArray<any>, Ret extends Effect.Effect<any, any, any>>(
538
- f: (...args: Args) => Ret
539
- ) =>
540
- (...args: Args): Effect.Effect.Unify<Ret> => f(...args)
541
-
542
517
  /* @internal */
543
518
  export const catchIf: {
544
519
  <E, EB extends E, A2, E2, R2>(
@@ -650,7 +625,7 @@ export const dieMessage = (message: string): Effect.Effect<never> =>
650
625
  export const dieSync = (evaluate: LazyArg<unknown>): Effect.Effect<never> => flatMap(sync(evaluate), die)
651
626
 
652
627
  /* @internal */
653
- export const either = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Either.Either<E, A>, never, R> =>
628
+ export const either = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Either.Either<A, E>, never, R> =>
654
629
  matchEffect(self, {
655
630
  onFailure: (e) => succeed(Either.left(e)),
656
631
  onSuccess: (a) => succeed(Either.right(a))
@@ -728,13 +703,13 @@ export const andThen: {
728
703
  ) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
729
704
  : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
730
705
  : Effect.Effect<X, E, R>
731
- <A, R, E, X>(
706
+ <A, E, R, X>(
732
707
  self: Effect.Effect<A, E, R>,
733
708
  f: (a: NoInfer<A>) => X
734
709
  ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
735
710
  : [X] extends [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
736
711
  : Effect.Effect<X, E, R>
737
- <A, R, E, X>(
712
+ <A, E, R, X>(
738
713
  self: Effect.Effect<A, E, R>,
739
714
  f: X
740
715
  ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
@@ -941,7 +916,7 @@ export const if_ = dual<
941
916
  (self: boolean | Effect.Effect<unknown, unknown, unknown>, { onFalse, onTrue }: {
942
917
  readonly onTrue: Effect.Effect<unknown, unknown, unknown>
943
918
  readonly onFalse: Effect.Effect<unknown, unknown, unknown>
944
- }) => typeof self === "boolean" ? (self ? onTrue : onFalse) : flatMap(self, unified((b) => (b ? onTrue : onFalse)))
919
+ }) => typeof self === "boolean" ? (self ? onTrue : onFalse) : flatMap(self, (b) => (b ? onTrue : onFalse))
945
920
  )
946
921
 
947
922
  /* @internal */
@@ -1051,7 +1026,7 @@ export const onError: {
1051
1026
  } = dual(2, <A, E, R, X, R2>(
1052
1027
  self: Effect.Effect<A, E, R>,
1053
1028
  cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1054
- ): Effect.Effect<A, E, R2 | R> => onExit(self, unified((exit) => exitIsSuccess(exit) ? unit : cleanup(exit.i0))))
1029
+ ): Effect.Effect<A, E, R2 | R> => onExit(self, (exit) => exitIsSuccess(exit) ? unit : cleanup(exit.i0)))
1055
1030
 
1056
1031
  /* @internal */
1057
1032
  export const onExit: {
@@ -1142,7 +1117,7 @@ export const orDieWith: {
1142
1117
  /* @internal */
1143
1118
  export const partitionMap = <A, A1, A2>(
1144
1119
  elements: Iterable<A>,
1145
- f: (a: A) => Either.Either<A1, A2>
1120
+ f: (a: A) => Either.Either<A2, A1>
1146
1121
  ): [left: Array<A1>, right: Array<A2>] =>
1147
1122
  ReadonlyArray.fromIterable(elements).reduceRight(
1148
1123
  ([lefts, rights], current) => {
@@ -1462,11 +1437,11 @@ export const zipWith: {
1462
1437
  ): Effect.Effect<B, E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => f(a, b))))
1463
1438
 
1464
1439
  /* @internal */
1465
- export const never: Effect.Effect<never> = asyncEither<never>(() => {
1440
+ export const never: Effect.Effect<never> = async<never>(() => {
1466
1441
  const interval = setInterval(() => {
1467
1442
  //
1468
1443
  }, 2 ** 31 - 1)
1469
- return Either.left(sync(() => clearInterval(interval)))
1444
+ return sync(() => clearInterval(interval))
1470
1445
  })
1471
1446
 
1472
1447
  // -----------------------------------------------------------------------------
@@ -1723,7 +1698,7 @@ const requestResolverVariance = {
1723
1698
  }
1724
1699
 
1725
1700
  /** @internal */
1726
- export class RequestResolverImpl<out R, in A> implements RequestResolver.RequestResolver<A, R> {
1701
+ export class RequestResolverImpl<in A, out R> implements RequestResolver.RequestResolver<A, R> {
1727
1702
  readonly [RequestResolverTypeId] = requestResolverVariance
1728
1703
  constructor(
1729
1704
  readonly runAll: (
@@ -1734,7 +1709,7 @@ export class RequestResolverImpl<out R, in A> implements RequestResolver.Request
1734
1709
  this.runAll = runAll as any
1735
1710
  }
1736
1711
  [Hash.symbol](): number {
1737
- return this.target ? Hash.hash(this.target) : Hash.random(this)
1712
+ return Hash.cached(this, this.target ? Hash.hash(this.target) : Hash.random(this))
1738
1713
  }
1739
1714
  [Equal.symbol](that: unknown): boolean {
1740
1715
  return this.target ?
@@ -1773,7 +1748,7 @@ export const resolverLocally = dual<
1773
1748
  self: FiberRef.FiberRef<A>,
1774
1749
  value: A
1775
1750
  ): RequestResolver.RequestResolver<B, R> =>
1776
- new RequestResolverImpl<R, B>(
1751
+ new RequestResolverImpl<B, R>(
1777
1752
  (requests) =>
1778
1753
  fiberRefLocally(
1779
1754
  use.runAll(requests),
@@ -2538,7 +2513,7 @@ export const exitForEachEffect: {
2538
2513
  })
2539
2514
 
2540
2515
  /** @internal */
2541
- export const exitFromEither = <E, A>(either: Either.Either<E, A>): Exit.Exit<A, E> => {
2516
+ export const exitFromEither = <R, L>(either: Either.Either<R, L>): Exit.Exit<R, L> => {
2542
2517
  switch (either._tag) {
2543
2518
  case "Left":
2544
2519
  return exitFail(either.left)
@@ -2844,18 +2819,18 @@ export const deferredMakeAs = <A, E = never>(fiberId: FiberId.FiberId): Effect.E
2844
2819
 
2845
2820
  /* @internal */
2846
2821
  export const deferredAwait = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<A, E> =>
2847
- asyncEither<A, E>((k) => {
2822
+ async<A, E>((resume) => {
2848
2823
  const state = MutableRef.get(self.state)
2849
2824
  switch (state._tag) {
2850
2825
  case DeferredOpCodes.OP_STATE_DONE: {
2851
- return Either.right(state.effect)
2826
+ return resume(state.effect)
2852
2827
  }
2853
2828
  case DeferredOpCodes.OP_STATE_PENDING: {
2854
2829
  pipe(
2855
2830
  self.state,
2856
- MutableRef.set(deferred.pending([k, ...state.joiners]))
2831
+ MutableRef.set(deferred.pending([resume, ...state.joiners]))
2857
2832
  )
2858
- return Either.left(deferredInterruptJoiner(self, k))
2833
+ return deferredInterruptJoiner(self, resume)
2859
2834
  }
2860
2835
  }
2861
2836
  }, self.blockingOn)
@@ -6,7 +6,7 @@ import { StructuralPrototype } from "./effectable.js"
6
6
  /** @internal */
7
7
  export const ArrayProto: Equal.Equal = Object.assign(Object.create(Array.prototype), {
8
8
  [Hash.symbol](this: Array<any>) {
9
- return Hash.array(this)
9
+ return Hash.cached(this, Hash.array(this))
10
10
  },
11
11
  [Equal.symbol](this: Array<any>, that: Equal.Equal) {
12
12
  if (Array.isArray(that) && this.length === that.length) {
@@ -13,21 +13,21 @@ import { invokeWithInterrupt, zipWithOptions } from "./fiberRuntime.js"
13
13
  import { complete } from "./request.js"
14
14
 
15
15
  /** @internal */
16
- export const make = <R, A>(
16
+ export const make = <A, R>(
17
17
  runAll: (requests: Array<Array<A>>) => Effect.Effect<void, never, R>
18
18
  ): RequestResolver.RequestResolver<A, R> =>
19
19
  new core.RequestResolverImpl((requests) => runAll(requests.map((_) => _.map((_) => _.request))))
20
20
 
21
21
  /** @internal */
22
- export const makeWithEntry = <R, A>(
22
+ export const makeWithEntry = <A, R>(
23
23
  runAll: (requests: Array<Array<Request.Entry<A>>>) => Effect.Effect<void, never, R>
24
24
  ): RequestResolver.RequestResolver<A, R> => new core.RequestResolverImpl((requests) => runAll(requests))
25
25
 
26
26
  /** @internal */
27
- export const makeBatched = <R, A extends Request.Request<any, any>>(
27
+ export const makeBatched = <A extends Request.Request<any, any>, R>(
28
28
  run: (requests: Array<A>) => Effect.Effect<void, never, R>
29
29
  ): RequestResolver.RequestResolver<A, R> =>
30
- new core.RequestResolverImpl<R, A>(
30
+ new core.RequestResolverImpl<A, R>(
31
31
  (requests) =>
32
32
  requests.length > 1 ?
33
33
  core.forEachSequentialDiscard(requests, (block) =>
@@ -50,16 +50,16 @@ export const makeBatched = <R, A extends Request.Request<any, any>>(
50
50
 
51
51
  /** @internal */
52
52
  export const around = dual<
53
- <R2, A2, R3, _>(
53
+ <A2, R2, X, R3>(
54
54
  before: Effect.Effect<A2, never, R2>,
55
- after: (a: A2) => Effect.Effect<_, never, R3>
56
- ) => <R, A>(
55
+ after: (a: A2) => Effect.Effect<X, never, R3>
56
+ ) => <A, R>(
57
57
  self: RequestResolver.RequestResolver<A, R>
58
58
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>,
59
- <R, A, R2, A2, R3, _>(
59
+ <A, R, A2, R2, X, R3>(
60
60
  self: RequestResolver.RequestResolver<A, R>,
61
61
  before: Effect.Effect<A2, never, R2>,
62
- after: (a: A2) => Effect.Effect<_, never, R3>
62
+ after: (a: A2) => Effect.Effect<X, never, R3>
63
63
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>
64
64
  >(3, (self, before, after) =>
65
65
  new core.RequestResolverImpl(
@@ -74,16 +74,16 @@ export const around = dual<
74
74
 
75
75
  /** @internal */
76
76
  export const aroundRequests = dual<
77
- <A, R2, A2, R3, _>(
77
+ <A, A2, R2, X, R3>(
78
78
  before: (requests: ReadonlyArray<NoInfer<A>>) => Effect.Effect<A2, never, R2>,
79
- after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<_, never, R3>
79
+ after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<X, never, R3>
80
80
  ) => <R>(
81
81
  self: RequestResolver.RequestResolver<A, R>
82
82
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>,
83
- <R, A, R2, A2, R3, _>(
83
+ <A, R, A2, R2, X, R3>(
84
84
  self: RequestResolver.RequestResolver<A, R>,
85
85
  before: (requests: ReadonlyArray<NoInfer<A>>) => Effect.Effect<A2, never, R2>,
86
- after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<_, never, R3>
86
+ after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<X, never, R3>
87
87
  ) => RequestResolver.RequestResolver<A, R | R2 | R3>
88
88
  >(3, (self, before, after) =>
89
89
  new core.RequestResolverImpl(
@@ -100,14 +100,14 @@ export const aroundRequests = dual<
100
100
 
101
101
  /** @internal */
102
102
  export const batchN = dual<
103
- (n: number) => <R, A>(
103
+ (n: number) => <A, R>(
104
104
  self: RequestResolver.RequestResolver<A, R>
105
105
  ) => RequestResolver.RequestResolver<A, R>,
106
- <R, A>(
106
+ <A, R>(
107
107
  self: RequestResolver.RequestResolver<A, R>,
108
108
  n: number
109
109
  ) => RequestResolver.RequestResolver<A, R>
110
- >(2, <R, A>(
110
+ >(2, <A, R>(
111
111
  self: RequestResolver.RequestResolver<A, R>,
112
112
  n: number
113
113
  ): RequestResolver.RequestResolver<A, R> =>
@@ -144,7 +144,7 @@ export const mapInputContext = dual<
144
144
  self: RequestResolver.RequestResolver<A, R>,
145
145
  f: (context: Context.Context<R0>) => Context.Context<R>
146
146
  ) =>
147
- new core.RequestResolverImpl<R0, A>(
147
+ new core.RequestResolverImpl<A, R0>(
148
148
  (requests) =>
149
149
  core.mapInputContext(
150
150
  self.runAll(requests),
@@ -162,7 +162,7 @@ export const eitherWith = dual<
162
162
  C extends Request.Request<any, any>
163
163
  >(
164
164
  that: RequestResolver.RequestResolver<B, R2>,
165
- f: (_: Request.Entry<C>) => Either.Either<Request.Entry<A>, Request.Entry<B>>
165
+ f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
166
166
  ) => <R>(
167
167
  self: RequestResolver.RequestResolver<A, R>
168
168
  ) => RequestResolver.RequestResolver<C, R | R2>,
@@ -175,7 +175,7 @@ export const eitherWith = dual<
175
175
  >(
176
176
  self: RequestResolver.RequestResolver<A, R>,
177
177
  that: RequestResolver.RequestResolver<B, R2>,
178
- f: (_: Request.Entry<C>) => Either.Either<Request.Entry<A>, Request.Entry<B>>
178
+ f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
179
179
  ) => RequestResolver.RequestResolver<C, R | R2>
180
180
  >(3, <
181
181
  R,
@@ -186,9 +186,9 @@ export const eitherWith = dual<
186
186
  >(
187
187
  self: RequestResolver.RequestResolver<A, R>,
188
188
  that: RequestResolver.RequestResolver<B, R2>,
189
- f: (_: Request.Entry<C>) => Either.Either<Request.Entry<A>, Request.Entry<B>>
189
+ f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
190
190
  ) =>
191
- new core.RequestResolverImpl<R | R2, C>(
191
+ new core.RequestResolverImpl<C, R | R2>(
192
192
  (batch) =>
193
193
  pipe(
194
194
  core.forEachSequential(batch, (requests) => {
@@ -262,7 +262,7 @@ export const fromEffectTagged = <
262
262
  A,
263
263
  ReturnType<Fns[keyof Fns]> extends Effect.Effect<infer _A, infer _E, infer R> ? R : never
264
264
  > =>
265
- makeBatched<any, A>((requests: Array<A>) => {
265
+ makeBatched<A, any>((requests: Array<A>) => {
266
266
  const grouped: Record<string, Array<A>> = {}
267
267
  const tags: Array<A["_tag"]> = []
268
268
  for (let i = 0, len = requests.length; i < len; i++) {
@@ -308,16 +308,16 @@ export const provideContext = dual<
308
308
 
309
309
  /** @internal */
310
310
  export const race = dual<
311
- <R2, A2 extends Request.Request<any, any>>(
311
+ <A2 extends Request.Request<any, any>, R2>(
312
312
  that: RequestResolver.RequestResolver<A2, R2>
313
- ) => <R, A extends Request.Request<any, any>>(
313
+ ) => <A extends Request.Request<any, any>, R>(
314
314
  self: RequestResolver.RequestResolver<A, R>
315
315
  ) => RequestResolver.RequestResolver<A | A2, R | R2>,
316
- <R, A extends Request.Request<any, any>, R2, A2 extends Request.Request<any, any>>(
316
+ <A extends Request.Request<any, any>, R, A2 extends Request.Request<any, any>, R2>(
317
317
  self: RequestResolver.RequestResolver<A, R>,
318
318
  that: RequestResolver.RequestResolver<A2, R2>
319
319
  ) => RequestResolver.RequestResolver<A | A2, R | R2>
320
- >(2, <R, A, R2, A2>(
320
+ >(2, <A, R, A2, R2>(
321
321
  self: RequestResolver.RequestResolver<A, R>,
322
322
  that: RequestResolver.RequestResolver<A2, R2>
323
323
  ) =>
@@ -188,8 +188,8 @@ type Instruction =
188
188
  /** @internal */
189
189
  export const diff = <Value, Value2, Patch, Patch2>(
190
190
  options: {
191
- readonly oldValue: Either<Value, Value2>
192
- readonly newValue: Either<Value, Value2>
191
+ readonly oldValue: Either<Value2, Value>
192
+ readonly newValue: Either<Value2, Value>
193
193
  readonly left: Differ<Value, Patch>
194
194
  readonly right: Differ<Value2, Patch2>
195
195
  }
@@ -243,23 +243,23 @@ export const combine = Dual.dual<
243
243
  export const patch = Dual.dual<
244
244
  <Value, Value2, Patch, Patch2>(
245
245
  options: {
246
- readonly oldValue: Either<Value, Value2>
246
+ readonly oldValue: Either<Value2, Value>
247
247
  readonly left: Differ<Value, Patch>
248
248
  readonly right: Differ<Value2, Patch2>
249
249
  }
250
- ) => (self: Differ.Or.Patch<Value, Value2, Patch, Patch2>) => Either<Value, Value2>,
250
+ ) => (self: Differ.Or.Patch<Value, Value2, Patch, Patch2>) => Either<Value2, Value>,
251
251
  <Value, Value2, Patch, Patch2>(
252
252
  self: Differ.Or.Patch<Value, Value2, Patch, Patch2>,
253
253
  options: {
254
- readonly oldValue: Either<Value, Value2>
254
+ readonly oldValue: Either<Value2, Value>
255
255
  readonly left: Differ<Value, Patch>
256
256
  readonly right: Differ<Value2, Patch2>
257
257
  }
258
- ) => Either<Value, Value2>
258
+ ) => Either<Value2, Value>
259
259
  >(2, <Value, Value2, Patch, Patch2>(
260
260
  self: Differ.Or.Patch<Value, Value2, Patch, Patch2>,
261
261
  { left, oldValue, right }: {
262
- oldValue: Either<Value, Value2>
262
+ oldValue: Either<Value2, Value>
263
263
  left: Differ<Value, Patch>
264
264
  right: Differ<Value2, Patch2>
265
265
  }
@@ -86,11 +86,11 @@ export const hashSet = <Value>(): Differ.Differ<HashSet<Value>, Differ.Differ.Ha
86
86
  export const orElseEither = Dual.dual<
87
87
  <Value2, Patch2>(that: Differ.Differ<Value2, Patch2>) => <Value, Patch>(
88
88
  self: Differ.Differ<Value, Patch>
89
- ) => Differ.Differ<Either<Value, Value2>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>,
89
+ ) => Differ.Differ<Either<Value2, Value>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>,
90
90
  <Value, Patch, Value2, Patch2>(
91
91
  self: Differ.Differ<Value, Patch>,
92
92
  that: Differ.Differ<Value2, Patch2>
93
- ) => Differ.Differ<Either<Value, Value2>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>
93
+ ) => Differ.Differ<Either<Value2, Value>, Differ.Differ.Or.Patch<Value, Value2, Patch, Patch2>>
94
94
  >(2, (self, that) =>
95
95
  make({
96
96
  empty: OrPatch.empty(),
@@ -2,7 +2,6 @@ import type * as Cause from "../../Cause.js"
2
2
  import type * as Deferred from "../../Deferred.js"
3
3
  import * as Duration from "../../Duration.js"
4
4
  import type * as Effect from "../../Effect.js"
5
- import * as Either from "../../Either.js"
6
5
  import * as Equal from "../../Equal.js"
7
6
  import type { Equivalence } from "../../Equivalence.js"
8
7
  import * as Exit from "../../Exit.js"
@@ -45,7 +44,7 @@ class Semaphore {
45
44
  }
46
45
 
47
46
  readonly take = (n: number): Effect.Effect<number> =>
48
- core.asyncEither<number>((resume) => {
47
+ core.async<number>((resume) => {
49
48
  if (this.free < n) {
50
49
  const observer = () => {
51
50
  if (this.free < n) {
@@ -56,12 +55,12 @@ class Semaphore {
56
55
  resume(core.succeed(n))
57
56
  }
58
57
  this.waiters.add(observer)
59
- return Either.left(core.sync(() => {
58
+ return core.sync(() => {
60
59
  this.waiters.delete(observer)
61
- }))
60
+ })
62
61
  }
63
62
  this.taken += n
64
- return Either.right(core.succeed(n))
63
+ return resume(core.succeed(n))
65
64
  })
66
65
 
67
66
  readonly updateTaken = (f: (n: number) => number): Effect.Effect<number> =>
@@ -84,7 +83,7 @@ class Semaphore {
84
83
 
85
84
  readonly releaseAll: Effect.Effect<number> = this.updateTaken((_) => 0)
86
85
 
87
- readonly withPermits = (n: number) => <R, E, A>(self: Effect.Effect<R, E, A>) =>
86
+ readonly withPermits = (n: number) => <A, E, R>(self: Effect.Effect<A, E, R>) =>
88
87
  core.uninterruptibleMask((restore) =>
89
88
  core.flatMap(
90
89
  restore(this.take(n)),
@@ -315,7 +314,7 @@ class Key<in out A> implements Equal.Equal {
315
314
  return false
316
315
  }
317
316
  [Hash.symbol]() {
318
- return this.eq ? 0 : Hash.hash(this.a)
317
+ return this.eq ? 0 : Hash.cached(this, Hash.hash(this.a))
319
318
  }
320
319
  }
321
320
 
@@ -376,14 +375,14 @@ export const raceFirst = dual<
376
375
 
377
376
  /** @internal */
378
377
  export const scheduleForked = dual<
379
- <R2, Out>(
380
- schedule: Schedule.Schedule<R2, unknown, Out>
378
+ <Out, R2>(
379
+ schedule: Schedule.Schedule<Out, unknown, R2>
381
380
  ) => <A, E, R>(
382
381
  self: Effect.Effect<A, E, R>
383
382
  ) => Effect.Effect<Fiber.RuntimeFiber<Out, E>, never, R | R2 | Scope.Scope>,
384
- <A, E, R, R2, Out>(
383
+ <A, E, R, Out, R2>(
385
384
  self: Effect.Effect<A, E, R>,
386
- schedule: Schedule.Schedule<R2, unknown, Out>
385
+ schedule: Schedule.Schedule<Out, unknown, R2>
387
386
  ) => Effect.Effect<Fiber.RuntimeFiber<Out, E>, never, R | R2 | Scope.Scope>
388
387
  >(2, (self, schedule) => pipe(self, _schedule.schedule_Effect(schedule), forkScoped))
389
388
 
@@ -73,7 +73,7 @@ export const EffectPrototype: Effect.Effect<never> & Equal.Equal = {
73
73
  return this === that
74
74
  },
75
75
  [Hash.symbol]() {
76
- return Hash.random(this)
76
+ return Hash.cached(this, Hash.random(this))
77
77
  },
78
78
  pipe() {
79
79
  return pipeArguments(this, arguments)
@@ -82,8 +82,8 @@ export const EffectPrototype: Effect.Effect<never> & Equal.Equal = {
82
82
 
83
83
  /** @internal */
84
84
  export const StructuralPrototype: Equal.Equal = {
85
- [Hash.symbol](this: Equal.Equal) {
86
- return Hash.structure(this)
85
+ [Hash.symbol]() {
86
+ return Hash.cached(this, Hash.structure(this))
87
87
  },
88
88
  [Equal.symbol](this: Equal.Equal, that: Equal.Equal) {
89
89
  const selfKeys = Object.keys(this)
@@ -20,12 +20,12 @@ export const TypeId: Either.TypeId = Symbol.for("effect/Either") as Either.TypeI
20
20
  const CommonProto = {
21
21
  ...EffectPrototype,
22
22
  [TypeId]: {
23
- _A: (_: never) => _
23
+ _R: (_: never) => _
24
24
  },
25
- [NodeInspectSymbol]<E, A>(this: Either.Either<E, A>) {
25
+ [NodeInspectSymbol]<L, R>(this: Either.Either<R, L>) {
26
26
  return this.toJSON()
27
27
  },
28
- toString<E, A>(this: Either.Left<E, A>) {
28
+ toString<L, R>(this: Either.Left<L, R>) {
29
29
  return format(this.toJSON())
30
30
  }
31
31
  }
@@ -33,13 +33,13 @@ const CommonProto = {
33
33
  const RightProto = Object.assign(Object.create(CommonProto), {
34
34
  _tag: "Right",
35
35
  _op: "Right",
36
- [Equal.symbol]<E, A>(this: Either.Right<E, A>, that: unknown): boolean {
36
+ [Equal.symbol]<L, R>(this: Either.Right<L, R>, that: unknown): boolean {
37
37
  return isEither(that) && isRight(that) && Equal.equals(that.right, this.right)
38
38
  },
39
- [Hash.symbol]<E, A>(this: Either.Right<E, A>) {
39
+ [Hash.symbol]<L, R>(this: Either.Right<L, R>) {
40
40
  return Hash.combine(Hash.hash(this._tag))(Hash.hash(this.right))
41
41
  },
42
- toJSON<E, A>(this: Either.Right<E, A>) {
42
+ toJSON<L, R>(this: Either.Right<L, R>) {
43
43
  return {
44
44
  _id: "Either",
45
45
  _tag: this._tag,
@@ -51,10 +51,10 @@ const RightProto = Object.assign(Object.create(CommonProto), {
51
51
  const LeftProto = Object.assign(Object.create(CommonProto), {
52
52
  _tag: "Left",
53
53
  _op: "Left",
54
- [Equal.symbol]<E, A>(this: Either.Left<E, A>, that: unknown): boolean {
54
+ [Equal.symbol]<L, R>(this: Either.Left<L, R>, that: unknown): boolean {
55
55
  return isEither(that) && isLeft(that) && Equal.equals(that.left, this.left)
56
56
  },
57
- [Hash.symbol]<E, A>(this: Either.Left<E, A>) {
57
+ [Hash.symbol]<L, R>(this: Either.Left<L, R>) {
58
58
  return Hash.combine(Hash.hash(this._tag))(Hash.hash(this.left))
59
59
  },
60
60
  toJSON<E, A>(this: Either.Left<E, A>) {
@@ -70,38 +70,41 @@ const LeftProto = Object.assign(Object.create(CommonProto), {
70
70
  export const isEither = (input: unknown): input is Either.Either<unknown, unknown> => hasProperty(input, TypeId)
71
71
 
72
72
  /** @internal */
73
- export const isLeft = <E, A>(ma: Either.Either<E, A>): ma is Either.Left<E, A> => ma._tag === "Left"
73
+ export const isLeft = <R, L>(ma: Either.Either<R, L>): ma is Either.Left<L, R> => ma._tag === "Left"
74
74
 
75
75
  /** @internal */
76
- export const isRight = <E, A>(ma: Either.Either<E, A>): ma is Either.Right<E, A> => ma._tag === "Right"
76
+ export const isRight = <R, L>(ma: Either.Either<R, L>): ma is Either.Right<L, R> => ma._tag === "Right"
77
77
 
78
78
  /** @internal */
79
- export const left = <E>(left: E): Either.Either<E, never> => {
79
+ export const left = <L>(left: L): Either.Either<never, L> => {
80
80
  const a = Object.create(LeftProto)
81
81
  a.left = left
82
82
  return a
83
83
  }
84
84
 
85
85
  /** @internal */
86
- export const right = <A>(right: A): Either.Either<never, A> => {
86
+ export const right = <R>(right: R): Either.Either<R> => {
87
87
  const a = Object.create(RightProto)
88
88
  a.right = right
89
89
  return a
90
90
  }
91
91
 
92
92
  /** @internal */
93
- export const getLeft = <E, A>(
94
- self: Either.Either<E, A>
95
- ): Option<E> => (isRight(self) ? option.none : option.some(self.left))
93
+ export const getLeft = <R, L>(
94
+ self: Either.Either<R, L>
95
+ ): Option<L> => (isRight(self) ? option.none : option.some(self.left))
96
96
 
97
97
  /** @internal */
98
- export const getRight = <E, A>(
99
- self: Either.Either<E, A>
100
- ): Option<A> => (isLeft(self) ? option.none : option.some(self.right))
98
+ export const getRight = <R, L>(
99
+ self: Either.Either<R, L>
100
+ ): Option<R> => (isLeft(self) ? option.none : option.some(self.right))
101
101
 
102
102
  /** @internal */
103
- export const fromOption = dual(
103
+ export const fromOption: {
104
+ <L>(onNone: () => L): <R>(self: Option<R>) => Either.Either<R, L>
105
+ <R, L>(self: Option<R>, onNone: () => L): Either.Either<R, L>
106
+ } = dual(
104
107
  2,
105
- <A, E>(self: Option<A>, onNone: () => E): Either.Either<E, A> =>
108
+ <R, L>(self: Option<R>, onNone: () => L): Either.Either<R, L> =>
106
109
  option.isNone(self) ? left(onNone()) : right(self.value)
107
110
  )
@@ -35,7 +35,7 @@ export const encode = (bytes: Uint8Array) => {
35
35
  }
36
36
 
37
37
  /** @internal */
38
- export const decode = (str: string): Either.Either<Encoding.DecodeException, Uint8Array> => {
38
+ export const decode = (str: string): Either.Either<Uint8Array, Encoding.DecodeException> => {
39
39
  const length = str.length
40
40
  if (length % 4 !== 0) {
41
41
  return Either.left(
@@ -8,7 +8,7 @@ export const encode = (data: Uint8Array) =>
8
8
  Base64.encode(data).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_")
9
9
 
10
10
  /** @internal */
11
- export const decode = (str: string): Either.Either<Encoding.DecodeException, Uint8Array> => {
11
+ export const decode = (str: string): Either.Either<Uint8Array, Encoding.DecodeException> => {
12
12
  const length = str.length
13
13
  if (length % 4 === 1) {
14
14
  return Either.left(
@@ -13,7 +13,7 @@ export const encode = (bytes: Uint8Array) => {
13
13
  }
14
14
 
15
15
  /** @internal */
16
- export const decode = (str: string): Either.Either<Encoding.DecodeException, Uint8Array> => {
16
+ export const decode = (str: string): Either.Either<Uint8Array, Encoding.DecodeException> => {
17
17
  const bytes = new TextEncoder().encode(str)
18
18
  if (bytes.length % 2 !== 0) {
19
19
  return Either.left(DecodeException(str, `Length must be a multiple of 2, but is ${bytes.length}`))
@@ -260,8 +260,8 @@ export const orElse = dual<
260
260
 
261
261
  /** @internal */
262
262
  export const orElseEither = dual<
263
- <A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<Either.Either<A, A2>, E | E2>,
264
- <A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<Either.Either<A, A2>, E | E2>
263
+ <A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<Either.Either<A2, A>, E | E2>,
264
+ <A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<Either.Either<A2, A>, E | E2>
265
265
  >(2, (self, that) => orElse(map(self, Either.left), map(that, Either.right)))
266
266
 
267
267
  /** @internal */