@fncts/io 0.0.22 → 0.0.23

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 (482) hide show
  1. package/Cached/definition.d.ts +6 -4
  2. package/Cached/internal.d.ts +4 -4
  3. package/Channel/api.d.ts +4 -4
  4. package/Channel/definition.d.ts +35 -14
  5. package/Channel/internal/ChannelExecutor.d.ts +1 -0
  6. package/Channel/internal/MergeDecision.d.ts +10 -6
  7. package/CountdownLatch.d.ts +1 -1
  8. package/Differ/definition.d.ts +2 -4
  9. package/Fiber/FiberRuntime.d.ts +9 -11
  10. package/Fiber/definition.d.ts +12 -6
  11. package/FiberRef/definition.d.ts +6 -2
  12. package/FiberRefs/api.d.ts +1 -1
  13. package/FiberRefs/definition.d.ts +1 -1
  14. package/Hub/definition.d.ts +29 -15
  15. package/IO/api/interrupt.d.ts +19 -19
  16. package/IO/api/onTermination.d.ts +0 -1
  17. package/IO/api/sequenceT.d.ts +19 -3
  18. package/IO/api.d.ts +17 -1
  19. package/IO/definition.d.ts +40 -26
  20. package/IO.d.ts +0 -1
  21. package/Layer/definition.d.ts +17 -13
  22. package/Logger/definition.d.ts +10 -6
  23. package/MVar/api.d.ts +101 -0
  24. package/MVar/definition.d.ts +43 -0
  25. package/MVar.d.ts +2 -0
  26. package/Push/api.d.ts +7 -4
  27. package/Push/definition.d.ts +10 -3
  28. package/Push/internal.d.ts +1 -1
  29. package/Queue/api/dimapIO.d.ts +17 -13
  30. package/Queue/definition.d.ts +26 -18
  31. package/Ref/Derived.d.ts +3 -1
  32. package/Ref/Synchronized/constructors.d.ts +6 -1
  33. package/Ref/Synchronized/definition.d.ts +4 -2
  34. package/Ref/definition.d.ts +36 -25
  35. package/Ref.d.ts +0 -1
  36. package/RefSubject/definition.d.ts +17 -11
  37. package/Reloadable/definition.d.ts +5 -1
  38. package/STM/api/atomically.d.ts +9 -0
  39. package/STM/api.d.ts +12 -6
  40. package/STM/definition.d.ts +28 -15
  41. package/STM/internal/Entry.d.ts +2 -2
  42. package/STM/internal/TryCommit.d.ts +2 -2
  43. package/STM/internal/Versioned.d.ts +1 -1
  44. package/STM.d.ts +1 -0
  45. package/Schedule/definition.d.ts +7 -3
  46. package/Scope/definition.d.ts +1 -1
  47. package/ScopedRef/definition.d.ts +1 -1
  48. package/State/api.d.ts +1 -1
  49. package/State/definition.d.ts +5 -2
  50. package/State/internal.d.ts +6 -2
  51. package/Stream/definition.d.ts +26 -5
  52. package/Stream/internal/Handoff.d.ts +21 -15
  53. package/Stream/internal/SinkEndReason.d.ts +2 -2
  54. package/Subject/Atomic.d.ts +8 -4
  55. package/SupervisorPatch.d.ts +1 -1
  56. package/TExit/definition.d.ts +5 -5
  57. package/TRef/definition.d.ts +16 -14
  58. package/TRef.d.ts +0 -1
  59. package/_cjs/Cached/definition.cjs +4 -2
  60. package/_cjs/Cached/definition.cjs.map +1 -1
  61. package/_cjs/Cached/internal.cjs +7 -6
  62. package/_cjs/Cached/internal.cjs.map +1 -1
  63. package/_cjs/Channel/api/mapOutConcurrentIO.cjs +1 -1
  64. package/_cjs/Channel/api/mergeAllWith.cjs +1 -1
  65. package/_cjs/Channel/api.cjs +20 -20
  66. package/_cjs/Channel/api.cjs.map +1 -1
  67. package/_cjs/Channel/definition.cjs +13 -3
  68. package/_cjs/Channel/definition.cjs.map +1 -1
  69. package/_cjs/Channel/internal/ChannelExecutor.cjs +11 -6
  70. package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
  71. package/_cjs/Channel/internal/MergeDecision.cjs +7 -3
  72. package/_cjs/Channel/internal/MergeDecision.cjs.map +1 -1
  73. package/_cjs/CountdownLatch.cjs +4 -2
  74. package/_cjs/CountdownLatch.cjs.map +1 -1
  75. package/_cjs/Differ/definition.cjs +3 -1
  76. package/_cjs/Differ/definition.cjs.map +1 -1
  77. package/_cjs/Fiber/FiberRuntime.cjs +96 -89
  78. package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
  79. package/_cjs/Fiber/definition.cjs +8 -4
  80. package/_cjs/Fiber/definition.cjs.map +1 -1
  81. package/_cjs/FiberRef/definition.cjs +8 -4
  82. package/_cjs/FiberRef/definition.cjs.map +1 -1
  83. package/_cjs/Future/api.cjs +17 -6
  84. package/_cjs/Future/api.cjs.map +1 -1
  85. package/_cjs/Hub/api.cjs +5 -5
  86. package/_cjs/Hub/api.cjs.map +1 -1
  87. package/_cjs/Hub/definition.cjs +9 -7
  88. package/_cjs/Hub/definition.cjs.map +1 -1
  89. package/_cjs/Hub/internal.cjs +6 -6
  90. package/_cjs/Hub/internal.cjs.map +1 -1
  91. package/_cjs/IO/api/asyncIO.cjs +1 -1
  92. package/_cjs/IO/api/asyncIO.cjs.map +1 -1
  93. package/_cjs/IO/api/asyncInterrupt.cjs +2 -2
  94. package/_cjs/IO/api/asyncInterrupt.cjs.map +1 -1
  95. package/_cjs/IO/api/bracketExit.cjs +1 -1
  96. package/_cjs/IO/api/bracketExit.cjs.map +1 -1
  97. package/_cjs/IO/api/foreachConcurrent.cjs +2 -2
  98. package/_cjs/IO/api/foreachConcurrent.cjs.map +1 -1
  99. package/_cjs/IO/api/forkIn.cjs +1 -1
  100. package/_cjs/IO/api/forkIn.cjs.map +1 -1
  101. package/_cjs/IO/api/forkScoped.cjs +1 -1
  102. package/_cjs/IO/api/forkScoped.cjs.map +1 -1
  103. package/_cjs/IO/api/fulfill.cjs +1 -1
  104. package/_cjs/IO/api/fulfill.cjs.map +1 -1
  105. package/_cjs/IO/api/interrupt.cjs +52 -43
  106. package/_cjs/IO/api/interrupt.cjs.map +1 -1
  107. package/_cjs/IO/api/onTermination.cjs +7 -6
  108. package/_cjs/IO/api/onTermination.cjs.map +1 -1
  109. package/_cjs/IO/api/race.cjs +1 -1
  110. package/_cjs/IO/api/race.cjs.map +1 -1
  111. package/_cjs/IO/api/sequenceT.cjs +1 -1
  112. package/_cjs/IO/api/sequenceT.cjs.map +1 -1
  113. package/_cjs/IO/api/zipConcurrent.cjs +1 -1
  114. package/_cjs/IO/api/zipConcurrent.cjs.map +1 -1
  115. package/_cjs/IO/api.cjs +79 -53
  116. package/_cjs/IO/api.cjs.map +1 -1
  117. package/_cjs/IO/definition.cjs +26 -21
  118. package/_cjs/IO/definition.cjs.map +1 -1
  119. package/_cjs/IO.cjs +0 -11
  120. package/_cjs/IO.cjs.map +1 -1
  121. package/_cjs/Layer/MemoMap.cjs +30 -31
  122. package/_cjs/Layer/MemoMap.cjs.map +1 -1
  123. package/_cjs/Layer/api.cjs +1 -1
  124. package/_cjs/Layer/api.cjs.map +1 -1
  125. package/_cjs/Layer/definition.cjs +12 -10
  126. package/_cjs/Layer/definition.cjs.map +1 -1
  127. package/_cjs/Logger/definition.cjs +3 -1
  128. package/_cjs/Logger/definition.cjs.map +1 -1
  129. package/_cjs/MVar/api.cjs +170 -0
  130. package/_cjs/MVar/api.cjs.map +1 -0
  131. package/_cjs/MVar/definition.cjs +28 -0
  132. package/_cjs/MVar/definition.cjs.map +1 -0
  133. package/_cjs/MVar.cjs +28 -0
  134. package/_cjs/MVar.cjs.map +1 -0
  135. package/_cjs/Push/api.cjs +39 -36
  136. package/_cjs/Push/api.cjs.map +1 -1
  137. package/_cjs/Push/definition.cjs +9 -2
  138. package/_cjs/Push/definition.cjs.map +1 -1
  139. package/_cjs/Push/internal.cjs +4 -2
  140. package/_cjs/Push/internal.cjs.map +1 -1
  141. package/_cjs/Queue/api/dimapIO.cjs +10 -10
  142. package/_cjs/Queue/api/dimapIO.cjs.map +1 -1
  143. package/_cjs/Queue/api/filterInputIO.cjs +4 -4
  144. package/_cjs/Queue/api/filterInputIO.cjs.map +1 -1
  145. package/_cjs/Queue/api/filterOutputIO.cjs +7 -7
  146. package/_cjs/Queue/api/filterOutputIO.cjs.map +1 -1
  147. package/_cjs/Queue/definition.cjs +3 -1
  148. package/_cjs/Queue/definition.cjs.map +1 -1
  149. package/_cjs/Queue/internal.cjs +2 -2
  150. package/_cjs/Queue/internal.cjs.map +1 -1
  151. package/_cjs/Queue/strategy.cjs +2 -2
  152. package/_cjs/Queue/strategy.cjs.map +1 -1
  153. package/_cjs/Ref/Derived.cjs +8 -4
  154. package/_cjs/Ref/Derived.cjs.map +1 -1
  155. package/_cjs/Ref/Synchronized/constructors.cjs +16 -7
  156. package/_cjs/Ref/Synchronized/constructors.cjs.map +1 -1
  157. package/_cjs/Ref/Synchronized/definition.cjs +16 -12
  158. package/_cjs/Ref/Synchronized/definition.cjs.map +1 -1
  159. package/_cjs/Ref/definition.cjs +3 -2
  160. package/_cjs/Ref/definition.cjs.map +1 -1
  161. package/_cjs/Ref.cjs +0 -11
  162. package/_cjs/Ref.cjs.map +1 -1
  163. package/_cjs/RefSubject/Synchronized/api.cjs +1 -1
  164. package/_cjs/RefSubject/definition.cjs +9 -5
  165. package/_cjs/RefSubject/definition.cjs.map +1 -1
  166. package/_cjs/Reloadable/definition.cjs +4 -2
  167. package/_cjs/Reloadable/definition.cjs.map +1 -1
  168. package/_cjs/STM/api/atomically.cjs +55 -0
  169. package/_cjs/STM/api/atomically.cjs.map +1 -0
  170. package/_cjs/STM/api.cjs +65 -91
  171. package/_cjs/STM/api.cjs.map +1 -1
  172. package/_cjs/STM/definition.cjs +32 -19
  173. package/_cjs/STM/definition.cjs.map +1 -1
  174. package/_cjs/STM/driver.cjs +3 -3
  175. package/_cjs/STM/driver.cjs.map +1 -1
  176. package/_cjs/STM/internal/Entry.cjs +6 -3
  177. package/_cjs/STM/internal/Entry.cjs.map +1 -1
  178. package/_cjs/STM/internal/TryCommit.cjs +5 -2
  179. package/_cjs/STM/internal/TryCommit.cjs.map +1 -1
  180. package/_cjs/STM/internal/Versioned.cjs +3 -1
  181. package/_cjs/STM/internal/Versioned.cjs.map +1 -1
  182. package/_cjs/STM.cjs +11 -0
  183. package/_cjs/STM.cjs.map +1 -1
  184. package/_cjs/Schedule/definition.cjs +3 -1
  185. package/_cjs/Schedule/definition.cjs.map +1 -1
  186. package/_cjs/Scope/api.cjs +1 -2
  187. package/_cjs/Scope/api.cjs.map +1 -1
  188. package/_cjs/Scope/definition.cjs +5 -3
  189. package/_cjs/Scope/definition.cjs.map +1 -1
  190. package/_cjs/ScopedRef/api.cjs +2 -2
  191. package/_cjs/ScopedRef/api.cjs.map +1 -1
  192. package/_cjs/ScopedRef/definition.cjs +3 -1
  193. package/_cjs/ScopedRef/definition.cjs.map +1 -1
  194. package/_cjs/State/api.cjs +2 -2
  195. package/_cjs/State/api.cjs.map +1 -1
  196. package/_cjs/State/definition.cjs +4 -2
  197. package/_cjs/State/definition.cjs.map +1 -1
  198. package/_cjs/State/internal.cjs +7 -3
  199. package/_cjs/State/internal.cjs.map +1 -1
  200. package/_cjs/Stream/api.cjs +1 -1
  201. package/_cjs/Stream/definition.cjs +4 -2
  202. package/_cjs/Stream/definition.cjs.map +1 -1
  203. package/_cjs/Stream/internal/Handoff.cjs +37 -37
  204. package/_cjs/Stream/internal/Handoff.cjs.map +1 -1
  205. package/_cjs/Stream/internal/SinkEndReason.cjs +6 -3
  206. package/_cjs/Stream/internal/SinkEndReason.cjs.map +1 -1
  207. package/_cjs/Subject/Atomic.cjs +6 -4
  208. package/_cjs/Subject/Atomic.cjs.map +1 -1
  209. package/_cjs/SubscriptionRef.cjs +1 -1
  210. package/_cjs/SupervisorPatch.cjs +3 -1
  211. package/_cjs/SupervisorPatch.cjs.map +1 -1
  212. package/_cjs/TExit/definition.cjs +25 -24
  213. package/_cjs/TExit/definition.cjs.map +1 -1
  214. package/_cjs/TFuture/constructors.cjs +1 -1
  215. package/_cjs/TReentrantLock/api.cjs +10 -9
  216. package/_cjs/TReentrantLock/api.cjs.map +1 -1
  217. package/_cjs/TRef/constructors.cjs +1 -1
  218. package/_cjs/TRef/definition.cjs +21 -21
  219. package/_cjs/TRef/definition.cjs.map +1 -1
  220. package/_cjs/TRef.cjs +0 -11
  221. package/_cjs/TRef.cjs.map +1 -1
  222. package/_cjs/TSemaphore/api.cjs +2 -2
  223. package/_cjs/TSemaphore/api.cjs.map +1 -1
  224. package/_cjs/TSemaphore/constructors.cjs +1 -1
  225. package/_cjs/internal/IsFatal.cjs +3 -1
  226. package/_cjs/internal/IsFatal.cjs.map +1 -1
  227. package/_mjs/Cached/definition.mjs +4 -2
  228. package/_mjs/Cached/definition.mjs.map +1 -1
  229. package/_mjs/Cached/internal.mjs +3 -5
  230. package/_mjs/Cached/internal.mjs.map +1 -1
  231. package/_mjs/Channel/api/mapOutConcurrentIO.mjs +1 -1
  232. package/_mjs/Channel/api/mergeAllWith.mjs +1 -1
  233. package/_mjs/Channel/api.mjs +15 -14
  234. package/_mjs/Channel/api.mjs.map +1 -1
  235. package/_mjs/Channel/definition.mjs +9 -1
  236. package/_mjs/Channel/definition.mjs.map +1 -1
  237. package/_mjs/Channel/internal/ChannelExecutor.mjs +11 -6
  238. package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
  239. package/_mjs/Channel/internal/MergeDecision.mjs +4 -1
  240. package/_mjs/Channel/internal/MergeDecision.mjs.map +1 -1
  241. package/_mjs/CountdownLatch.mjs +3 -1
  242. package/_mjs/CountdownLatch.mjs.map +1 -1
  243. package/_mjs/Differ/definition.mjs +3 -1
  244. package/_mjs/Differ/definition.mjs.map +1 -1
  245. package/_mjs/Fiber/FiberRuntime.mjs +97 -90
  246. package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
  247. package/_mjs/Fiber/definition.mjs +5 -2
  248. package/_mjs/Fiber/definition.mjs.map +1 -1
  249. package/_mjs/FiberRef/definition.mjs +6 -3
  250. package/_mjs/FiberRef/definition.mjs.map +1 -1
  251. package/_mjs/Future/api.mjs +17 -6
  252. package/_mjs/Future/api.mjs.map +1 -1
  253. package/_mjs/Hub/api.mjs +6 -6
  254. package/_mjs/Hub/api.mjs.map +1 -1
  255. package/_mjs/Hub/definition.mjs +5 -4
  256. package/_mjs/Hub/definition.mjs.map +1 -1
  257. package/_mjs/Hub/internal.mjs +6 -6
  258. package/_mjs/Hub/internal.mjs.map +1 -1
  259. package/_mjs/IO/api/asyncIO.mjs +1 -1
  260. package/_mjs/IO/api/asyncIO.mjs.map +1 -1
  261. package/_mjs/IO/api/asyncInterrupt.mjs +2 -2
  262. package/_mjs/IO/api/asyncInterrupt.mjs.map +1 -1
  263. package/_mjs/IO/api/bracketExit.mjs +1 -1
  264. package/_mjs/IO/api/bracketExit.mjs.map +1 -1
  265. package/_mjs/IO/api/foreachConcurrent.mjs +2 -2
  266. package/_mjs/IO/api/foreachConcurrent.mjs.map +1 -1
  267. package/_mjs/IO/api/forkIn.mjs +1 -1
  268. package/_mjs/IO/api/forkIn.mjs.map +1 -1
  269. package/_mjs/IO/api/forkScoped.mjs +1 -1
  270. package/_mjs/IO/api/forkScoped.mjs.map +1 -1
  271. package/_mjs/IO/api/fulfill.mjs +1 -1
  272. package/_mjs/IO/api/fulfill.mjs.map +1 -1
  273. package/_mjs/IO/api/interrupt.mjs +46 -38
  274. package/_mjs/IO/api/interrupt.mjs.map +1 -1
  275. package/_mjs/IO/api/onTermination.mjs +7 -6
  276. package/_mjs/IO/api/onTermination.mjs.map +1 -1
  277. package/_mjs/IO/api/race.mjs +1 -1
  278. package/_mjs/IO/api/race.mjs.map +1 -1
  279. package/_mjs/IO/api/sequenceT.mjs +1 -1
  280. package/_mjs/IO/api/sequenceT.mjs.map +1 -1
  281. package/_mjs/IO/api/zipConcurrent.mjs +1 -1
  282. package/_mjs/IO/api/zipConcurrent.mjs.map +1 -1
  283. package/_mjs/IO/api.mjs +73 -50
  284. package/_mjs/IO/api.mjs.map +1 -1
  285. package/_mjs/IO/definition.mjs +23 -19
  286. package/_mjs/IO/definition.mjs.map +1 -1
  287. package/_mjs/IO.mjs +0 -1
  288. package/_mjs/IO.mjs.map +1 -1
  289. package/_mjs/Layer/MemoMap.mjs +28 -29
  290. package/_mjs/Layer/MemoMap.mjs.map +1 -1
  291. package/_mjs/Layer/api.mjs +2 -2
  292. package/_mjs/Layer/api.mjs.map +1 -1
  293. package/_mjs/Layer/definition.mjs +9 -8
  294. package/_mjs/Layer/definition.mjs.map +1 -1
  295. package/_mjs/Logger/definition.mjs +1 -0
  296. package/_mjs/Logger/definition.mjs.map +1 -1
  297. package/_mjs/MVar/api.mjs +150 -0
  298. package/_mjs/MVar/api.mjs.map +1 -0
  299. package/_mjs/MVar/definition.mjs +18 -0
  300. package/_mjs/MVar/definition.mjs.map +1 -0
  301. package/_mjs/MVar.mjs +4 -0
  302. package/_mjs/MVar.mjs.map +1 -0
  303. package/_mjs/Push/api.mjs +39 -36
  304. package/_mjs/Push/api.mjs.map +1 -1
  305. package/_mjs/Push/definition.mjs +5 -0
  306. package/_mjs/Push/definition.mjs.map +1 -1
  307. package/_mjs/Push/internal.mjs +4 -2
  308. package/_mjs/Push/internal.mjs.map +1 -1
  309. package/_mjs/Queue/api/dimapIO.mjs +11 -11
  310. package/_mjs/Queue/api/dimapIO.mjs.map +1 -1
  311. package/_mjs/Queue/api/filterInputIO.mjs +5 -5
  312. package/_mjs/Queue/api/filterInputIO.mjs.map +1 -1
  313. package/_mjs/Queue/api/filterOutputIO.mjs +8 -8
  314. package/_mjs/Queue/api/filterOutputIO.mjs.map +1 -1
  315. package/_mjs/Queue/definition.mjs +1 -0
  316. package/_mjs/Queue/definition.mjs.map +1 -1
  317. package/_mjs/Queue/internal.mjs +2 -2
  318. package/_mjs/Queue/internal.mjs.map +1 -1
  319. package/_mjs/Queue/strategy.mjs +2 -2
  320. package/_mjs/Queue/strategy.mjs.map +1 -1
  321. package/_mjs/Ref/Derived.mjs +6 -3
  322. package/_mjs/Ref/Derived.mjs.map +1 -1
  323. package/_mjs/Ref/Synchronized/constructors.mjs +15 -7
  324. package/_mjs/Ref/Synchronized/constructors.mjs.map +1 -1
  325. package/_mjs/Ref/Synchronized/definition.mjs +13 -10
  326. package/_mjs/Ref/Synchronized/definition.mjs.map +1 -1
  327. package/_mjs/Ref/definition.mjs +1 -1
  328. package/_mjs/Ref/definition.mjs.map +1 -1
  329. package/_mjs/Ref.mjs +0 -1
  330. package/_mjs/Ref.mjs.map +1 -1
  331. package/_mjs/RefSubject/Synchronized/api.mjs +1 -1
  332. package/_mjs/RefSubject/definition.mjs +10 -3
  333. package/_mjs/RefSubject/definition.mjs.map +1 -1
  334. package/_mjs/Reloadable/definition.mjs +2 -1
  335. package/_mjs/Reloadable/definition.mjs.map +1 -1
  336. package/_mjs/STM/api/atomically.mjs +47 -0
  337. package/_mjs/STM/api/atomically.mjs.map +1 -0
  338. package/_mjs/STM/api.mjs +61 -88
  339. package/_mjs/STM/api.mjs.map +1 -1
  340. package/_mjs/STM/definition.mjs +27 -17
  341. package/_mjs/STM/definition.mjs.map +1 -1
  342. package/_mjs/STM/driver.mjs +3 -3
  343. package/_mjs/STM/driver.mjs.map +1 -1
  344. package/_mjs/STM/internal/Entry.mjs +5 -2
  345. package/_mjs/STM/internal/Entry.mjs.map +1 -1
  346. package/_mjs/STM/internal/TryCommit.mjs +6 -2
  347. package/_mjs/STM/internal/TryCommit.mjs.map +1 -1
  348. package/_mjs/STM/internal/Versioned.mjs +3 -1
  349. package/_mjs/STM/internal/Versioned.mjs.map +1 -1
  350. package/_mjs/STM.mjs +1 -0
  351. package/_mjs/STM.mjs.map +1 -1
  352. package/_mjs/Schedule/definition.mjs +1 -0
  353. package/_mjs/Schedule/definition.mjs.map +1 -1
  354. package/_mjs/Scope/api.mjs +1 -2
  355. package/_mjs/Scope/api.mjs.map +1 -1
  356. package/_mjs/Scope/definition.mjs +4 -2
  357. package/_mjs/Scope/definition.mjs.map +1 -1
  358. package/_mjs/ScopedRef/api.mjs +2 -2
  359. package/_mjs/ScopedRef/api.mjs.map +1 -1
  360. package/_mjs/ScopedRef/definition.mjs +3 -1
  361. package/_mjs/ScopedRef/definition.mjs.map +1 -1
  362. package/_mjs/State/api.mjs +1 -1
  363. package/_mjs/State/api.mjs.map +1 -1
  364. package/_mjs/State/definition.mjs +4 -1
  365. package/_mjs/State/definition.mjs.map +1 -1
  366. package/_mjs/State/internal.mjs +5 -2
  367. package/_mjs/State/internal.mjs.map +1 -1
  368. package/_mjs/Stream/api.mjs +1 -1
  369. package/_mjs/Stream/definition.mjs +2 -1
  370. package/_mjs/Stream/definition.mjs.map +1 -1
  371. package/_mjs/Stream/internal/Handoff.mjs +40 -32
  372. package/_mjs/Stream/internal/Handoff.mjs.map +1 -1
  373. package/_mjs/Stream/internal/SinkEndReason.mjs +6 -2
  374. package/_mjs/Stream/internal/SinkEndReason.mjs.map +1 -1
  375. package/_mjs/Subject/Atomic.mjs +4 -2
  376. package/_mjs/Subject/Atomic.mjs.map +1 -1
  377. package/_mjs/SubscriptionRef.mjs +1 -1
  378. package/_mjs/SupervisorPatch.mjs +3 -1
  379. package/_mjs/SupervisorPatch.mjs.map +1 -1
  380. package/_mjs/TExit/definition.mjs +25 -24
  381. package/_mjs/TExit/definition.mjs.map +1 -1
  382. package/_mjs/TFuture/constructors.mjs +1 -1
  383. package/_mjs/TReentrantLock/api.mjs +10 -9
  384. package/_mjs/TReentrantLock/api.mjs.map +1 -1
  385. package/_mjs/TRef/constructors.mjs +1 -1
  386. package/_mjs/TRef/definition.mjs +19 -20
  387. package/_mjs/TRef/definition.mjs.map +1 -1
  388. package/_mjs/TRef.mjs +0 -1
  389. package/_mjs/TRef.mjs.map +1 -1
  390. package/_mjs/TSemaphore/api.mjs +2 -2
  391. package/_mjs/TSemaphore/api.mjs.map +1 -1
  392. package/_mjs/TSemaphore/constructors.mjs +1 -1
  393. package/_mjs/internal/IsFatal.mjs +3 -1
  394. package/_mjs/internal/IsFatal.mjs.map +1 -1
  395. package/_src/Cached/definition.ts +6 -4
  396. package/_src/Cached/internal.ts +4 -4
  397. package/_src/Channel/api.ts +14 -15
  398. package/_src/Channel/definition.ts +37 -14
  399. package/_src/Channel/internal/ChannelExecutor.ts +14 -3
  400. package/_src/Channel/internal/MergeDecision.ts +11 -6
  401. package/_src/CountdownLatch.ts +1 -1
  402. package/_src/Differ/definition.ts +2 -4
  403. package/_src/Fiber/FiberRuntime.ts +54 -50
  404. package/_src/Fiber/definition.ts +15 -8
  405. package/_src/FiberRef/definition.ts +9 -4
  406. package/_src/FiberRefs/api.ts +1 -1
  407. package/_src/FiberRefs/definition.ts +1 -1
  408. package/_src/Future/api.ts +14 -5
  409. package/_src/Hub/api.ts +9 -7
  410. package/_src/Hub/definition.ts +30 -15
  411. package/_src/IO/api/interrupt.ts +72 -55
  412. package/_src/IO/api/onTermination.ts +8 -7
  413. package/_src/IO/api/sequenceT.ts +4 -6
  414. package/_src/IO/api.ts +23 -1
  415. package/_src/IO/definition.ts +36 -27
  416. package/_src/IO.ts +0 -1
  417. package/_src/Layer/MemoMap.ts +1 -1
  418. package/_src/Layer/api.ts +2 -2
  419. package/_src/Layer/definition.ts +18 -13
  420. package/_src/Logger/definition.ts +9 -4
  421. package/_src/MVar/api.ts +185 -0
  422. package/_src/MVar/definition.ts +45 -0
  423. package/_src/MVar.ts +4 -0
  424. package/_src/Push/api.ts +7 -4
  425. package/_src/Push/definition.ts +12 -3
  426. package/_src/Push/internal.ts +2 -2
  427. package/_src/Queue/api/dimapIO.ts +24 -13
  428. package/_src/Queue/api/filterInputIO.ts +9 -7
  429. package/_src/Queue/api/filterOutputIO.ts +9 -7
  430. package/_src/Queue/definition.ts +27 -18
  431. package/_src/Ref/Derived.ts +4 -1
  432. package/_src/Ref/Synchronized/constructors.ts +9 -0
  433. package/_src/Ref/Synchronized/definition.ts +5 -2
  434. package/_src/Ref/definition.ts +36 -25
  435. package/_src/Ref.ts +0 -1
  436. package/_src/RefSubject/definition.ts +19 -12
  437. package/_src/Reloadable/definition.ts +6 -1
  438. package/_src/STM/api/atomically.ts +43 -0
  439. package/_src/STM/api.ts +20 -38
  440. package/_src/STM/definition.ts +33 -20
  441. package/_src/STM/driver.ts +3 -3
  442. package/_src/STM/internal/Entry.ts +2 -2
  443. package/_src/STM/internal/TryCommit.ts +4 -4
  444. package/_src/STM/internal/Versioned.ts +1 -1
  445. package/_src/STM.ts +1 -0
  446. package/_src/Schedule/definition.ts +8 -3
  447. package/_src/Scope/definition.ts +2 -2
  448. package/_src/ScopedRef/definition.ts +1 -1
  449. package/_src/State/api.ts +1 -1
  450. package/_src/State/definition.ts +6 -3
  451. package/_src/State/internal.ts +8 -3
  452. package/_src/Stream/definition.ts +17 -5
  453. package/_src/Stream/internal/Handoff.ts +31 -24
  454. package/_src/Stream/internal/SinkEndReason.ts +2 -2
  455. package/_src/Subject/Atomic.ts +8 -4
  456. package/_src/SupervisorPatch.ts +1 -1
  457. package/_src/TExit/definition.ts +11 -12
  458. package/_src/TRef/definition.ts +18 -14
  459. package/_src/TRef.ts +0 -1
  460. package/_src/global.ts +4 -0
  461. package/_src/internal/IsFatal.ts +1 -1
  462. package/global.d.ts +4 -0
  463. package/internal/IsFatal.d.ts +1 -1
  464. package/package.json +2 -2
  465. package/IO/api/onExit.d.ts +0 -7
  466. package/Ref/symbols.d.ts +0 -30
  467. package/TRef/symbols.d.ts +0 -20
  468. package/_cjs/IO/api/onExit.cjs +0 -19
  469. package/_cjs/IO/api/onExit.cjs.map +0 -1
  470. package/_cjs/Ref/symbols.cjs +0 -37
  471. package/_cjs/Ref/symbols.cjs.map +0 -1
  472. package/_cjs/TRef/symbols.cjs +0 -27
  473. package/_cjs/TRef/symbols.cjs.map +0 -1
  474. package/_mjs/IO/api/onExit.mjs +0 -11
  475. package/_mjs/IO/api/onExit.mjs.map +0 -1
  476. package/_mjs/Ref/symbols.mjs +0 -25
  477. package/_mjs/Ref/symbols.mjs.map +0 -1
  478. package/_mjs/TRef/symbols.mjs +0 -17
  479. package/_mjs/TRef/symbols.mjs.map +0 -1
  480. package/_src/IO/api/onExit.ts +0 -11
  481. package/_src/Ref/symbols.ts +0 -29
  482. package/_src/TRef/symbols.ts +0 -19
@@ -81,6 +81,6 @@ export function remove(self: FiberRefs, fiberRef: FiberRef<any>): FiberRefs {
81
81
  * @tsplus getter fncts.io.FiberRefs unFiberRefs
82
82
  * @tsplus macro identity
83
83
  */
84
- export function unFiberRefs(self: FiberRefs): HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>> {
84
+ export function unFiberRefs(self: FiberRefs): HashMap<FiberRef<any>, Cons<readonly [FiberId.Runtime, unknown]>> {
85
85
  return FiberRefs.reverseGet(self);
86
86
  }
@@ -8,7 +8,7 @@ export interface FiberRefsN extends HKT {
8
8
  export interface FiberRefs
9
9
  extends Newtype<
10
10
  { readonly FiberRefs: unique symbol },
11
- HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>>
11
+ HashMap<FiberRef<any>, Cons<readonly [FiberId.Runtime, unknown]>>
12
12
  > {}
13
13
 
14
14
  /**
@@ -194,17 +194,26 @@ export function unsafeSucceed<A>(a: A, __tsplusTrace?: string) {
194
194
  * @tsplus getter fncts.io.Future await
195
195
  */
196
196
  export function wait<E, A>(future: Future<E, A>, __tsplusTrace?: string): IO<never, E, A> {
197
- return IO.asyncInterrupt<never, E, A>((k) => {
197
+ return IO.defer(() => {
198
198
  switch (future.state._tag) {
199
199
  case FutureStateTag.Done: {
200
- return Either.right(future.state.value);
200
+ return future.state.value;
201
201
  }
202
202
  case FutureStateTag.Pending: {
203
- future.state = new Pending(future.state.joiners.prepend(k));
204
- return Either.left(interruptJoiner(future, k));
203
+ return IO.asyncInterrupt<never, E, A>((k) => {
204
+ switch (future.state._tag) {
205
+ case FutureStateTag.Done: {
206
+ return Either.right(future.state.value);
207
+ }
208
+ case FutureStateTag.Pending: {
209
+ future.state = new Pending(future.state.joiners.prepend(k));
210
+ return Either.left(interruptJoiner(future, k));
211
+ }
212
+ }
213
+ }, future.blockingOn);
205
214
  }
206
215
  }
207
- }, future.blockingOn);
216
+ });
208
217
  }
209
218
 
210
219
  function interruptJoiner<E, A>(
package/_src/Hub/api.ts CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  unsafeMakeHub,
12
12
  } from "@fncts/io/Hub/internal";
13
13
  import { Hub as HubInternal } from "@fncts/io/internal/Hub";
14
- import { EnqueueTypeId, QueueTypeId } from "@fncts/io/Queue";
14
+ import { EnqueueTypeId, QueueTypeId , QueueVariance } from "@fncts/io/Queue";
15
15
 
16
16
  /**
17
17
  * Waits for the hub to be shut down.
@@ -275,12 +275,14 @@ export function mapIO<B, RC, EC, C>(f: (b: B) => IO<RC, EC, C>, __tsplusTrace?:
275
275
  class ToQueue<RA, RB, EA, EB, A, B> implements PEnqueue<RA, RB, EA, EB, A, B> {
276
276
  readonly [QueueTypeId]: QueueTypeId = QueueTypeId;
277
277
  readonly [EnqueueTypeId]: EnqueueTypeId = EnqueueTypeId;
278
- declare _RA: () => RA;
279
- declare _RB: () => RB;
280
- declare _EA: () => EA;
281
- declare _EB: () => EB;
282
- declare _A: (_: A) => void;
283
- declare _B: () => B;
278
+ declare [QueueVariance]: {
279
+ readonly _RA: (_: never) => RA;
280
+ readonly _RB: (_: never) => RB;
281
+ readonly _EA: (_: never) => EA;
282
+ readonly _EB: (_: never) => EB;
283
+ readonly _A: (_: A) => void;
284
+ readonly _B: (_: never) => B;
285
+ };
284
286
  constructor(readonly source: PHubInternal<RA, RB, EA, EB, A, B>) {}
285
287
  awaitShutdown = this.source.awaitShutdown;
286
288
  capacity = this.source.capacity;
@@ -1,7 +1,10 @@
1
1
  import type { IO } from "@fncts/io/IO";
2
2
  import type { PDequeue, PEnqueue, PEnqueueInternal } from "@fncts/io/Queue";
3
3
 
4
- import { EnqueueTypeId, QueueTypeId } from "@fncts/io/Queue";
4
+ import { EnqueueTypeId, QueueTypeId, QueueVariance } from "@fncts/io/Queue/definition";
5
+
6
+ export const HubVariance = Symbol.for("fncts.io.Hub.Variance");
7
+ export type HubVariance = typeof HubVariance;
5
8
 
6
9
  export const HubTypeId = Symbol.for("fncts.io.Hub");
7
10
  export type HubTypeId = typeof HubTypeId;
@@ -17,13 +20,15 @@ export type HubTypeId = typeof HubTypeId;
17
20
  * @tsplus type fncts.io.Hub
18
21
  */
19
22
  export interface PHub<RA, RB, EA, EB, A, B> extends PEnqueue<RA, RB, EA, EB, A, B> {
20
- readonly _typeId: HubTypeId;
21
- readonly _RA: () => RA;
22
- readonly _RB: () => RB;
23
- readonly _EA: () => EA;
24
- readonly _EB: () => EB;
25
- readonly _A: (_: A) => void;
26
- readonly _B: () => B;
23
+ readonly [HubTypeId]: HubTypeId;
24
+ readonly [HubVariance]: {
25
+ readonly _RA: (_: never) => RA;
26
+ readonly _RB: (_: never) => RB;
27
+ readonly _EA: (_: never) => EA;
28
+ readonly _EB: (_: never) => EB;
29
+ readonly _A: (_: A) => void;
30
+ readonly _B: (_: never) => B;
31
+ };
27
32
  }
28
33
 
29
34
  /**
@@ -46,13 +51,23 @@ export abstract class PHubInternal<RA, RB, EA, EB, A, B>
46
51
  {
47
52
  readonly [QueueTypeId]: QueueTypeId = QueueTypeId;
48
53
  readonly [EnqueueTypeId]: EnqueueTypeId = EnqueueTypeId;
49
- _typeId: HubTypeId = HubTypeId;
50
- readonly _RA!: () => RA;
51
- readonly _RB!: () => RB;
52
- readonly _EA!: () => EA;
53
- readonly _EB!: () => EB;
54
- readonly _A!: (_: A) => void;
55
- readonly _B!: () => B;
54
+ readonly [HubTypeId]: HubTypeId = HubTypeId;
55
+ declare [HubVariance]: {
56
+ readonly _RA: (_: never) => RA;
57
+ readonly _RB: (_: never) => RB;
58
+ readonly _EA: (_: never) => EA;
59
+ readonly _EB: (_: never) => EB;
60
+ readonly _A: (_: A) => void;
61
+ readonly _B: (_: never) => B;
62
+ };
63
+ declare [QueueVariance]: {
64
+ readonly _RA: (_: never) => RA;
65
+ readonly _RB: (_: never) => RB;
66
+ readonly _EA: (_: never) => EA;
67
+ readonly _EB: (_: never) => EB;
68
+ readonly _A: (_: A) => void;
69
+ readonly _B: (_: never) => B;
70
+ };
56
71
 
57
72
  /**
58
73
  * Waits for the hub to be shut down.
@@ -2,6 +2,21 @@ import { Dynamic, Interruptible, Uninterruptible } from "@fncts/io/IO/definition
2
2
  import { RuntimeFlag } from "@fncts/io/RuntimeFlag";
3
3
  import { RuntimeFlags } from "@fncts/io/RuntimeFlags";
4
4
 
5
+ export interface InterruptibilityRestorer {
6
+ readonly restore: <R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) => IO<R, E, A>;
7
+ readonly force: <R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) => IO<R, E, A>;
8
+ }
9
+
10
+ const RestoreInterruptible: InterruptibilityRestorer = {
11
+ restore: (io, __tsplusTrace) => io.interruptible,
12
+ force: (io, __tsplusTrace) => io.interruptible,
13
+ };
14
+
15
+ const RestoreUninterruptible: InterruptibilityRestorer = {
16
+ restore: (io, __tsplusTrace) => io.uninterruptible,
17
+ force: (io, __tsplusTrace) => io.uninterruptible.disconnect.interruptible,
18
+ };
19
+
5
20
  /**
6
21
  * Returns an effect that is interrupted as if by the specified fiber.
7
22
  *
@@ -51,7 +66,6 @@ export const interrupt: IO<never, never, never> = IO.fiberId.flatMap(IO.interrup
51
66
  */
52
67
  export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
53
68
  return new Interruptible(self, __tsplusTrace);
54
- // return self.setInterruptStatus(InterruptStatus.interruptible);
55
69
  }
56
70
 
57
71
  /**
@@ -67,7 +81,6 @@ export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string
67
81
  */
68
82
  export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
69
83
  return new Uninterruptible(self, __tsplusTrace);
70
- // return self.setInterruptStatus(InterruptStatus.uninterruptible);
71
84
  }
72
85
 
73
86
  /**
@@ -77,9 +90,9 @@ export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: stri
77
90
  *
78
91
  * @tsplus static fncts.io.IOOps uninterruptibleMask
79
92
  */
80
- export function uninterruptibleMask<R, E, A>(f: (restore: InterruptStatusRestore) => IO<R, E, A>): IO<R, E, A> {
93
+ export function uninterruptibleMask<R, E, A>(f: (restore: InterruptibilityRestorer) => IO<R, E, A>): IO<R, E, A> {
81
94
  return new Dynamic(RuntimeFlags.disable(RuntimeFlag.Interruption), (oldFlags) =>
82
- f(new InterruptStatusRestore(InterruptStatus.fromBoolean(oldFlags.interruption))),
95
+ f(oldFlags.interruption ? RestoreInterruptible : RestoreUninterruptible),
83
96
  );
84
97
  }
85
98
 
@@ -109,52 +122,72 @@ export function ensuring<R1>(finalizer: IO<R1, never, any>, __tsplusTrace?: stri
109
122
  * @tsplus static fncts.io.IOOps interruptibleMask
110
123
  */
111
124
  export function interruptibleMask<R, E, A>(
112
- k: (restore: InterruptStatusRestore) => IO<R, E, A>,
125
+ k: (restore: InterruptibilityRestorer) => IO<R, E, A>,
113
126
  __tsplusTrace?: string,
114
127
  ): IO<R, E, A> {
115
- return IO.checkInterruptible((flag) => k(new InterruptStatusRestore(flag)).interruptible);
128
+ return IO.checkInterruptible(
129
+ (flag) => k(flag.isInterruptible ? RestoreInterruptible : RestoreUninterruptible).interruptible,
130
+ );
116
131
  }
117
132
 
118
133
  /**
119
134
  * Calls the specified function, and runs the effect it returns, if this
120
135
  * effect is interrupted.
121
136
  *
122
- * @tsplus fluent fncts.io.IO onInterrupt
137
+ * @tsplus pipeable fncts.io.IO onInterrupt
123
138
  */
124
- export function onInterrupt_<R, E, A, R1>(
125
- ma: IO<R, E, A>,
126
- cleanup: (interruptors: HashSet<FiberId>) => IO<R1, never, any>,
127
- __tsplusTrace?: string,
128
- ): IO<R | R1, E, A> {
129
- return uninterruptibleMask(({ restore }) =>
130
- restore(ma).matchCauseIO(
131
- (cause) =>
132
- cause.interrupted ? cleanup(cause.interruptors).zipRight(IO.failCauseNow(cause)) : IO.failCauseNow(cause),
133
- IO.succeedNow,
134
- ),
135
- );
139
+ export function onInterrupt<R1, E1>(cleanup: Lazy<IO<R1, E1, any>>, __tsplusTrace?: string) {
140
+ return <R, E, A>(ma: IO<R, E, A>): IO<R | R1, E | E1, A> => {
141
+ return ma.onExit((exit) =>
142
+ exit.match(
143
+ (cause) => (cause.isInterruptedOnly ? cleanup() : IO.unit),
144
+ () => IO.unit,
145
+ ),
146
+ );
147
+ };
136
148
  }
137
149
 
138
150
  /**
139
151
  * Calls the specified function, and runs the effect it returns, if this
140
- * effect is interrupted (allows for expanding error).
152
+ * effect is interrupted.
141
153
  *
142
- * @tsplus fluent fncts.io.IO onInterruptExtended
154
+ * @tsplus pipeable fncts.io.IO onInterrupt
143
155
  */
144
- export function onInterruptExtended_<R, E, A, R2, E2>(
145
- self: IO<R, E, A>,
146
- cleanup: Lazy<IO<R2, E2, any>>,
156
+ export function onInterruptWith<R1, E1>(
157
+ cleanup: (interruptors: HashSet<FiberId>) => IO<R1, E1, any>,
147
158
  __tsplusTrace?: string,
148
- ): IO<R | R2, E | E2, A> {
149
- return uninterruptibleMask(({ restore }) =>
150
- restore(self).matchCauseIO(
151
- (cause) =>
152
- cause.interrupted
153
- ? cleanup().matchCauseIO(IO.failCauseNow, () => IO.failCauseNow(cause))
154
- : IO.failCauseNow(cause),
155
- IO.succeedNow,
156
- ),
157
- );
159
+ ) {
160
+ return <R, E, A>(ma: IO<R, E, A>): IO<R | R1, E | E1, A> => {
161
+ return ma.onExit((exit) =>
162
+ exit.match(
163
+ (cause) => (cause.isInterruptedOnly ? cleanup(cause.interruptors) : IO.unit),
164
+ () => IO.unit,
165
+ ),
166
+ );
167
+ };
168
+ }
169
+
170
+ /**
171
+ * @tsplus pipeable fncts.io.IO onExit
172
+ */
173
+ export function onExit<E, A, R1, E1>(cleanup: (exit: Exit<E, A>) => IO<R1, E1, any>, __tsplusTrace?: string) {
174
+ return <R>(self: IO<R, E, A>): IO<R | R1, E | E1, A> => {
175
+ return IO.uninterruptibleMask(({ restore }) =>
176
+ restore(self).matchCauseIO(
177
+ (failure1) => {
178
+ const result = Exit.failCause(failure1);
179
+ return cleanup(result).matchCauseIO(
180
+ (failure2) => IO.failCauseNow(Cause.then(failure1, failure2)),
181
+ () => IO.fromExitNow(result),
182
+ );
183
+ },
184
+ (success) => {
185
+ const result = Exit.succeed(success);
186
+ return cleanup(result) > IO.fromExitNow(result);
187
+ },
188
+ ),
189
+ );
190
+ };
158
191
  }
159
192
 
160
193
  /**
@@ -174,27 +207,11 @@ export function onInterruptExtended_<R, E, A, R2, E2>(
174
207
  */
175
208
  export function disconnect<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
176
209
  return uninterruptibleMask(({ restore }) =>
177
- IO.fiberId.flatMap((id) =>
178
- restore(self).forkDaemon.flatMap((fiber) =>
179
- restore(fiber.join).onInterrupt(() => fiber.interruptAs(id).forkDaemon),
180
- ),
210
+ IO.fiberId.flatMap((fiberId) =>
211
+ Do((Δ) => {
212
+ const fiber = Δ(restore(self).forkDaemon);
213
+ return Δ(restore(fiber.join).onInterrupt(fiber.interruptAsFork(fiberId)));
214
+ }),
181
215
  ),
182
216
  );
183
217
  }
184
-
185
- /**
186
- * Used to restore the inherited interruptibility
187
- */
188
- export class InterruptStatusRestore {
189
- constructor(readonly flag: InterruptStatus) {}
190
-
191
- restore = <R, E, A>(io: IO<R, E, A>): IO<R, E, A> =>
192
- this.flag.isInterruptible ? io.interruptible : io.uninterruptible;
193
-
194
- force = <R, E, A>(io: IO<R, E, A>): IO<R, E, A> => {
195
- if (this.flag.isUninteruptible) {
196
- return io.uninterruptible.disconnect.interruptible;
197
- }
198
- return io.interruptible;
199
- };
200
- }
@@ -3,13 +3,14 @@
3
3
  */
4
4
  export function onTermination<R1>(cleanup: (cause: Cause<never>) => URIO<R1, any>, __tsplusTrace?: string) {
5
5
  return <R, E, A>(self: Lazy<IO<R, E, A>>): IO<R | R1, E, A> => {
6
- return IO.unit.bracketExit(
7
- () => self(),
8
- (_, exit: Exit<E, A>) =>
9
- exit.match(
10
- (cause) => cause.failureOrCause.match(() => IO.unit, cleanup),
11
- () => IO.unit,
12
- ),
6
+ return IO.defer(self).onExit((exit) =>
7
+ exit.match(
8
+ (cause) => {
9
+ if (cause.isFailure) return IO.unit;
10
+ else return cleanup(cause as Cause<never>);
11
+ },
12
+ () => IO.unit,
13
+ ),
13
14
  );
14
15
  };
15
16
  }
@@ -1,4 +1,4 @@
1
- import type { _A, _E, _R } from "@fncts/base/types";
1
+ import type { IOVariance } from "@fncts/io/IO/definition";
2
2
 
3
3
  import { identity, unsafeCoerce } from "@fncts/base/data/function";
4
4
 
@@ -8,11 +8,9 @@ import { identity, unsafeCoerce } from "@fncts/base/data/function";
8
8
  export function sequenceT<T extends ReadonlyNonEmptyArray<IO<any, any, any>>>(
9
9
  ...ios: T
10
10
  ): IO<
11
- _R<T[number]>,
12
- _E<T[number]>,
13
- {
14
- [K in keyof T]: _A<T[K]>;
15
- }
11
+ [T[number]] extends [{ [IOVariance]: { _R: () => infer R } }] ? R : never,
12
+ [T[number]] extends [{ [IOVariance]: { _E: () => infer E } }] ? E : never,
13
+ { [K in keyof T]: T[K] extends { [IOVariance]: { _A: () => infer A } } ? A : never }
16
14
  > {
17
15
  return unsafeCoerce(IO.foreach(ios, identity));
18
16
  }
package/_src/IO/api.ts CHANGED
@@ -410,6 +410,21 @@ export function deferTryCatch<R, E, A, E1>(
410
410
  });
411
411
  }
412
412
 
413
+ /**
414
+ * @tsplus static fncts.io.IOOps descriptorWith
415
+ */
416
+ export function descriptorWith<R, E, A>(f: (descriptor: FiberDescriptor) => IO<R, E, A>): IO<R, E, A> {
417
+ return IO.withFiberRuntime((fiber, status) => {
418
+ const descriptor = new FiberDescriptor(fiber.id, status, fiber.getFiberRef(FiberRef.interruptedCause).interruptors);
419
+ return f(descriptor);
420
+ });
421
+ }
422
+
423
+ /**
424
+ * @tsplus static fncts.io.IOOps descriptor
425
+ */
426
+ export const descriptor: UIO<FiberDescriptor> = IO.descriptorWith((descriptor) => IO.succeedNow(descriptor));
427
+
413
428
  /**
414
429
  * Folds an `IO` that may fail with `E` or succeed with `A` into one that never fails but succeeds with `Either<E, A>`
415
430
  *
@@ -488,7 +503,14 @@ export function failCause<E = never, A = never>(cause: Lazy<Cause<E>>, __tsplusT
488
503
  *
489
504
  * @tsplus static fncts.io.IOOps fiberId
490
505
  */
491
- export const fiberId: IO<never, never, FiberId> = IO.withFiberRuntime((fiber) => IO.succeed(fiber.id));
506
+ export const fiberId: IO<never, never, FiberId> = IO.fiberIdWith((id) => IO.succeedNow(id));
507
+
508
+ /**
509
+ * @tsplus static fncts.io.IOOps fiberIdWith
510
+ */
511
+ export function fiberIdWith<R, E, A>(f: (id: FiberId.Runtime) => IO<R, E, A>): IO<R, E, A> {
512
+ return IO.withFiberRuntime((fiber) => f(fiber.id));
513
+ }
492
514
 
493
515
  /**
494
516
  * Filters the collection using the specified effectual predicate.
@@ -6,6 +6,9 @@ import type { Trace } from "@fncts/base/data/Trace";
6
6
  import { RuntimeFlag } from "../RuntimeFlag.js";
7
7
  import { RuntimeFlags } from "../RuntimeFlags.js";
8
8
 
9
+ export const IOVariance = Symbol.for("fncts.io.IO.Variance");
10
+ export type IOVariance = typeof IOVariance;
11
+
9
12
  export const IOTypeId = Symbol.for("fncts.io.IO");
10
13
  export type IOTypeId = typeof IOTypeId;
11
14
 
@@ -23,10 +26,12 @@ export interface IOF extends HKT {
23
26
  * @tsplus companion fncts.io.IOOps
24
27
  */
25
28
  export abstract class IO<R, E, A> {
26
- readonly _typeId: IOTypeId = IOTypeId;
27
- declare _R: () => R;
28
- declare _E: () => E;
29
- declare _A: () => A;
29
+ readonly [IOTypeId]: IOTypeId = IOTypeId;
30
+ declare [IOVariance]: {
31
+ _R: () => R;
32
+ _E: () => E;
33
+ _A: () => A;
34
+ };
30
35
  }
31
36
 
32
37
  /**
@@ -45,9 +50,9 @@ export const IOAspects: IOAspects = {};
45
50
  export function unifyIO<X extends IO<any, any, any>>(
46
51
  self: X,
47
52
  ): IO<
48
- [X] extends [{ _R: () => infer R }] ? R : never,
49
- [X] extends [{ _E: () => infer E }] ? E : never,
50
- [X] extends [{ _A: () => infer A }] ? A : never
53
+ [X] extends [{ [IOVariance]: { _R: () => infer R } }] ? R : never,
54
+ [X] extends [{ [IOVariance]: { _E: () => infer E } }] ? E : never,
55
+ [X] extends [{ [IOVariance]: { _A: () => infer A } }] ? A : never
51
56
  > {
52
57
  return self;
53
58
  }
@@ -58,7 +63,7 @@ export type URIO<R, A> = IO<R, never, A>;
58
63
 
59
64
  export type FIO<E, A> = IO<never, E, A>;
60
65
 
61
- export const enum IOTag {
66
+ export const enum IOOpCode {
62
67
  SucceedNow,
63
68
  Fail,
64
69
  Sync,
@@ -72,21 +77,24 @@ export const enum IOTag {
72
77
  Stateful,
73
78
  WhileLoop,
74
79
  YieldNow,
80
+ Commit,
81
+ RevertFlags,
82
+ UpdateTrace,
75
83
  }
76
84
 
77
85
  export function isIO(u: unknown): u is IO<any, any, any> {
78
- return hasTypeId(u, IOTypeId);
86
+ return isObject(u) && IOTypeId in u;
79
87
  }
80
88
 
81
89
  export class Sync<A> extends IO<never, never, A> {
82
- readonly _tag = IOTag.Sync;
90
+ readonly ioOpCode = IOOpCode.Sync;
83
91
  constructor(readonly evaluate: () => A, readonly trace?: string) {
84
92
  super();
85
93
  }
86
94
  }
87
95
 
88
96
  export class Async<R, E, A> extends IO<R, E, A> {
89
- readonly _tag = IOTag.Async;
97
+ readonly ioOpCode = IOOpCode.Async;
90
98
  constructor(
91
99
  readonly registerCallback: (f: (_: IO<R, E, A>) => void) => any,
92
100
  readonly blockingOn: () => FiberId,
@@ -100,7 +108,7 @@ export class Async<R, E, A> extends IO<R, E, A> {
100
108
  * @internal
101
109
  */
102
110
  export class OnSuccessAndFailure<R, E, A, R1, E1, B, R2, E2, C> extends IO<R | R1 | R2, E1 | E2, B | C> {
103
- readonly _tag = IOTag.OnSuccessAndFailure;
111
+ readonly ioOpCode = IOOpCode.OnSuccessAndFailure;
104
112
 
105
113
  constructor(
106
114
  readonly first: IO<R, E, A>,
@@ -120,7 +128,7 @@ export class OnSuccessAndFailure<R, E, A, R1, E1, B, R2, E2, C> extends IO<R | R
120
128
  }
121
129
 
122
130
  export class OnFailure<R, E, A, R1, E1, B> extends IO<R | R1, E1, A | B> {
123
- readonly _tag = IOTag.OnFailure;
131
+ readonly ioOpCode = IOOpCode.OnFailure;
124
132
  constructor(
125
133
  readonly first: IO<R, E, A>,
126
134
  readonly failureK: (cause: Cause<E>) => IO<R1, E1, B>,
@@ -141,7 +149,7 @@ export class OnFailure<R, E, A, R1, E1, B> extends IO<R | R1, E1, A | B> {
141
149
  * @internal
142
150
  */
143
151
  export class OnSuccess<R, R1, E, E1, A, A1> extends IO<R | R1, E | E1, A1> {
144
- readonly _tag = IOTag.OnSuccess;
152
+ readonly ioOpCode = IOOpCode.OnSuccess;
145
153
  constructor(readonly first: IO<R, E, A>, readonly successK: (a: A) => IO<R1, E1, A1>, readonly trace?: string) {
146
154
  super();
147
155
  }
@@ -157,21 +165,21 @@ export class OnSuccess<R, R1, E, E1, A, A1> extends IO<R | R1, E | E1, A1> {
157
165
  * @internal
158
166
  */
159
167
  export class SucceedNow<A> extends IO<never, never, A> {
160
- readonly _tag = IOTag.SucceedNow;
168
+ readonly ioOpCode = IOOpCode.SucceedNow;
161
169
  constructor(readonly value: A, readonly trace?: string) {
162
170
  super();
163
171
  }
164
172
  }
165
173
 
166
174
  export class UpdateRuntimeFlags extends IO<never, never, void> {
167
- readonly _tag = IOTag.UpdateRuntimeFlags;
175
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlags;
168
176
  constructor(readonly update: RuntimeFlags.Patch, readonly trace?: string) {
169
177
  super();
170
178
  }
171
179
  }
172
180
 
173
181
  export class Interruptible<R, E, A> extends IO<R, E, A> {
174
- readonly _tag = IOTag.UpdateRuntimeFlagsWithin;
182
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
175
183
  constructor(readonly effect: IO<R, E, A>, readonly trace?: string) {
176
184
  super();
177
185
  }
@@ -183,7 +191,7 @@ export class Interruptible<R, E, A> extends IO<R, E, A> {
183
191
  }
184
192
 
185
193
  export class Uninterruptible<R, E, A> extends IO<R, E, A> {
186
- readonly _tag = IOTag.UpdateRuntimeFlagsWithin;
194
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
187
195
  constructor(readonly effect: IO<R, E, A>, readonly trace?: string) {
188
196
  super();
189
197
  }
@@ -195,7 +203,7 @@ export class Uninterruptible<R, E, A> extends IO<R, E, A> {
195
203
  }
196
204
 
197
205
  export class Dynamic<R, E, A> extends IO<R, E, A> {
198
- readonly _tag = IOTag.UpdateRuntimeFlagsWithin;
206
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
199
207
  constructor(
200
208
  readonly update: RuntimeFlagsPatch,
201
209
  readonly f: (oldRuntimeFlags: RuntimeFlags) => IO<R, E, A>,
@@ -210,21 +218,21 @@ export class Dynamic<R, E, A> extends IO<R, E, A> {
210
218
  }
211
219
 
212
220
  export class GenerateStackTrace extends IO<never, never, Trace> {
213
- readonly _tag = IOTag.GenerateStackTrace;
221
+ readonly ioOpCode = IOOpCode.GenerateStackTrace;
214
222
  constructor(readonly trace?: string) {
215
223
  super();
216
224
  }
217
225
  }
218
226
 
219
227
  export class Stateful<R, E, A> extends IO<R, E, A> {
220
- readonly _tag = IOTag.Stateful;
228
+ readonly ioOpCode = IOOpCode.Stateful;
221
229
  constructor(readonly onState: (fiber: FiberRuntime<E, A>, status: Running) => IO<R, E, A>, readonly trace?: string) {
222
230
  super();
223
231
  }
224
232
  }
225
233
 
226
234
  export class WhileLoop<R, E, A> extends IO<R, E, void> {
227
- readonly _tag = IOTag.WhileLoop;
235
+ readonly ioOpCode = IOOpCode.WhileLoop;
228
236
  constructor(
229
237
  readonly check: () => boolean,
230
238
  readonly body: () => IO<R, E, A>,
@@ -236,7 +244,7 @@ export class WhileLoop<R, E, A> extends IO<R, E, void> {
236
244
  }
237
245
 
238
246
  export class YieldNow extends IO<never, never, void> {
239
- readonly _tag = IOTag.YieldNow;
247
+ readonly ioOpCode = IOOpCode.YieldNow;
240
248
  constructor(readonly trace?: string) {
241
249
  super();
242
250
  }
@@ -246,7 +254,7 @@ export class YieldNow extends IO<never, never, void> {
246
254
  * @internal
247
255
  */
248
256
  export class Fail<E> extends IO<never, E, never> {
249
- readonly _tag = IOTag.Fail;
257
+ readonly ioOpCode = IOOpCode.Fail;
250
258
 
251
259
  constructor(readonly cause: Lazy<Cause<E>>, readonly trace?: string) {
252
260
  super();
@@ -266,7 +274,8 @@ export type Concrete =
266
274
  | Stateful<any, any, any>
267
275
  | WhileLoop<any, any, any>
268
276
  | YieldNow
269
- | Fail<any>;
277
+ | Fail<any>
278
+ | STM<any, any, any>;
270
279
 
271
280
  /**
272
281
  * @tsplus static fncts.io.IOOps concrete
@@ -292,10 +301,10 @@ export const IOErrorTypeId = Symbol.for("fncts.io.IO.IOError");
292
301
  export type IOErrorTypeId = typeof IOErrorTypeId;
293
302
 
294
303
  export class IOError<E> {
295
- readonly _typeId: IOErrorTypeId = IOErrorTypeId;
304
+ readonly [IOErrorTypeId]: IOErrorTypeId = IOErrorTypeId;
296
305
  constructor(readonly cause: Cause<E>) {}
297
306
  }
298
307
 
299
308
  export function isIOError(u: unknown): u is IOError<unknown> {
300
- return hasTypeId(u, IOErrorTypeId);
309
+ return isObject(u) && IOErrorTypeId in u;
301
310
  }
package/_src/IO.ts CHANGED
@@ -33,7 +33,6 @@ export * from "./IO/api/fulfill.js";
33
33
  export * from "./IO/api/interrupt.js";
34
34
  export * from "./IO/api/memoize.js";
35
35
  export * from "./IO/api/once.js";
36
- export * from "./IO/api/onExit.js";
37
36
  export * from "./IO/api/onTermination.js";
38
37
  export * from "./IO/api/provideLayer.js";
39
38
  export * from "./IO/api/provideSomeLayer.js";
@@ -162,7 +162,7 @@ export function scope(scope: Scope, __tsplusTrace?: string) {
162
162
  .zipWith(memoMap.getOrElseMemoize(scope, layer.that, layer.trace), layer.f, layer.trace),
163
163
  );
164
164
  }
165
- case LayerTag.ZipWithC: {
165
+ case LayerTag.ZipWithConcurrent: {
166
166
  return IO.succeed(
167
167
  () => (memoMap: MemoMap) =>
168
168
  memoMap
package/_src/Layer/api.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Spreadable } from "@fncts/base/types";
2
2
  import type { Erase } from "@fncts/typelevel/Intersection";
3
3
 
4
- import { Fold, Fresh, FromScoped, Layer, To, ZipWithC } from "@fncts/io/Layer/definition";
4
+ import { Fold, Fresh, FromScoped, Layer, To, ZipWithConcurrent } from "@fncts/io/Layer/definition";
5
5
  import { DecisionTag } from "@fncts/io/Schedule";
6
6
 
7
7
  /**
@@ -9,7 +9,7 @@ import { DecisionTag } from "@fncts/io/Schedule";
9
9
  */
10
10
  export function and<RIn1, E1, ROut1>(that: Layer<RIn1, E1, ROut1>, __tsplusTrace?: string) {
11
11
  return <RIn, E, ROut>(self: Layer<RIn, E, ROut>): Layer<RIn | RIn1, E | E1, ROut | ROut1> => {
12
- return new ZipWithC(self, that, (a, b) => a.union(b), __tsplusTrace);
12
+ return new ZipWithConcurrent(self, that, (a, b) => a.union(b), __tsplusTrace);
13
13
  };
14
14
  }
15
15