effect 2.2.5 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (693) hide show
  1. package/RateLimiter/package.json +6 -0
  2. package/dist/cjs/Cause.js +14 -1
  3. package/dist/cjs/Cause.js.map +1 -1
  4. package/dist/cjs/Channel.js.map +1 -1
  5. package/dist/cjs/Clock.js.map +1 -1
  6. package/dist/cjs/Console.js.map +1 -1
  7. package/dist/cjs/Context.js +23 -25
  8. package/dist/cjs/Context.js.map +1 -1
  9. package/dist/cjs/Data.js +3 -3
  10. package/dist/cjs/Data.js.map +1 -1
  11. package/dist/cjs/Deferred.js +1 -1
  12. package/dist/cjs/Deferred.js.map +1 -1
  13. package/dist/cjs/Effect.js +9 -9
  14. package/dist/cjs/Effect.js.map +1 -1
  15. package/dist/cjs/Effectable.js.map +1 -1
  16. package/dist/cjs/Either.js.map +1 -1
  17. package/dist/cjs/Exit.js +2 -2
  18. package/dist/cjs/Exit.js.map +1 -1
  19. package/dist/cjs/Fiber.js.map +1 -1
  20. package/dist/cjs/FiberMap.js +3 -3
  21. package/dist/cjs/FiberRef.js.map +1 -1
  22. package/dist/cjs/FiberRefs.js.map +1 -1
  23. package/dist/cjs/FiberSet.js +3 -3
  24. package/dist/cjs/FiberSet.js.map +1 -1
  25. package/dist/cjs/GroupBy.js.map +1 -1
  26. package/dist/cjs/Layer.js.map +1 -1
  27. package/dist/cjs/LogLevel.js.map +1 -1
  28. package/dist/cjs/Logger.js.map +1 -1
  29. package/dist/cjs/Metric.js.map +1 -1
  30. package/dist/cjs/Number.js +20 -1
  31. package/dist/cjs/Number.js.map +1 -1
  32. package/dist/cjs/Option.js.map +1 -1
  33. package/dist/cjs/Pool.js.map +1 -1
  34. package/dist/cjs/PubSub.js.map +1 -1
  35. package/dist/cjs/Queue.js.map +1 -1
  36. package/dist/cjs/Random.js.map +1 -1
  37. package/dist/cjs/RateLimiter.js +38 -0
  38. package/dist/cjs/RateLimiter.js.map +1 -0
  39. package/dist/cjs/ReadonlyRecord.js +45 -9
  40. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  41. package/dist/cjs/Ref.js.map +1 -1
  42. package/dist/cjs/Request.js.map +1 -1
  43. package/dist/cjs/RequestResolver.js.map +1 -1
  44. package/dist/cjs/Resource.js.map +1 -1
  45. package/dist/cjs/Runtime.js +1 -4
  46. package/dist/cjs/Runtime.js.map +1 -1
  47. package/dist/cjs/RuntimeFlags.js.map +1 -1
  48. package/dist/cjs/STM.js.map +1 -1
  49. package/dist/cjs/Schedule.js.map +1 -1
  50. package/dist/cjs/Scope.js.map +1 -1
  51. package/dist/cjs/ScopedRef.js.map +1 -1
  52. package/dist/cjs/SingleProducerAsyncInput.js.map +1 -1
  53. package/dist/cjs/Sink.js.map +1 -1
  54. package/dist/cjs/Stream.js.map +1 -1
  55. package/dist/cjs/SubscriptionRef.js.map +1 -1
  56. package/dist/cjs/Supervisor.js.map +1 -1
  57. package/dist/cjs/SynchronizedRef.js.map +1 -1
  58. package/dist/cjs/TArray.js.map +1 -1
  59. package/dist/cjs/TDeferred.js.map +1 -1
  60. package/dist/cjs/TMap.js.map +1 -1
  61. package/dist/cjs/TPriorityQueue.js.map +1 -1
  62. package/dist/cjs/TPubSub.js.map +1 -1
  63. package/dist/cjs/TQueue.js.map +1 -1
  64. package/dist/cjs/TRandom.js.map +1 -1
  65. package/dist/cjs/TReentrantLock.js.map +1 -1
  66. package/dist/cjs/TRef.js.map +1 -1
  67. package/dist/cjs/TSemaphore.js.map +1 -1
  68. package/dist/cjs/TSet.js.map +1 -1
  69. package/dist/cjs/Take.js +6 -6
  70. package/dist/cjs/Take.js.map +1 -1
  71. package/dist/cjs/TestAnnotation.js +10 -13
  72. package/dist/cjs/TestAnnotation.js.map +1 -1
  73. package/dist/cjs/TestAnnotations.js +1 -1
  74. package/dist/cjs/TestAnnotations.js.map +1 -1
  75. package/dist/cjs/TestClock.js +1 -1
  76. package/dist/cjs/TestClock.js.map +1 -1
  77. package/dist/cjs/TestConfig.js +1 -1
  78. package/dist/cjs/TestConfig.js.map +1 -1
  79. package/dist/cjs/TestContext.js.map +1 -1
  80. package/dist/cjs/TestLive.js +1 -1
  81. package/dist/cjs/TestLive.js.map +1 -1
  82. package/dist/cjs/TestServices.js.map +1 -1
  83. package/dist/cjs/TestSized.js +1 -1
  84. package/dist/cjs/TestSized.js.map +1 -1
  85. package/dist/cjs/Utils.js +0 -1
  86. package/dist/cjs/Utils.js.map +1 -1
  87. package/dist/cjs/index.js +4 -2
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/internal/cache.js.map +1 -1
  90. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  91. package/dist/cjs/internal/channel/mergeDecision.js +2 -6
  92. package/dist/cjs/internal/channel/mergeDecision.js.map +1 -1
  93. package/dist/cjs/internal/channel/singleProducerAsyncInput.js.map +1 -1
  94. package/dist/cjs/internal/channel.js +1 -1
  95. package/dist/cjs/internal/channel.js.map +1 -1
  96. package/dist/cjs/internal/clock.js +1 -1
  97. package/dist/cjs/internal/clock.js.map +1 -1
  98. package/dist/cjs/internal/configProvider.js +2 -4
  99. package/dist/cjs/internal/configProvider.js.map +1 -1
  100. package/dist/cjs/internal/console.js.map +1 -1
  101. package/dist/cjs/internal/context.js +31 -22
  102. package/dist/cjs/internal/context.js.map +1 -1
  103. package/dist/cjs/internal/core-effect.js +13 -27
  104. package/dist/cjs/internal/core-effect.js.map +1 -1
  105. package/dist/cjs/internal/core-stream.js.map +1 -1
  106. package/dist/cjs/internal/core.js +61 -130
  107. package/dist/cjs/internal/core.js.map +1 -1
  108. package/dist/cjs/internal/data.js.map +1 -1
  109. package/dist/cjs/internal/defaultServices/console.js +1 -1
  110. package/dist/cjs/internal/defaultServices/console.js.map +1 -1
  111. package/dist/cjs/internal/defaultServices.js.map +1 -1
  112. package/dist/cjs/internal/deferred.js.map +1 -1
  113. package/dist/cjs/internal/differ/contextPatch.js +9 -9
  114. package/dist/cjs/internal/differ/contextPatch.js.map +1 -1
  115. package/dist/cjs/internal/effect/circular.js +7 -10
  116. package/dist/cjs/internal/effect/circular.js.map +1 -1
  117. package/dist/cjs/internal/effectable.js +4 -4
  118. package/dist/cjs/internal/effectable.js.map +1 -1
  119. package/dist/cjs/internal/fiber.js +2 -6
  120. package/dist/cjs/internal/fiber.js.map +1 -1
  121. package/dist/cjs/internal/fiberRuntime.js +10 -19
  122. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  123. package/dist/cjs/internal/groupBy.js.map +1 -1
  124. package/dist/cjs/internal/keyedPool.js.map +1 -1
  125. package/dist/cjs/internal/layer/circular.js.map +1 -1
  126. package/dist/cjs/internal/layer.js +3 -3
  127. package/dist/cjs/internal/layer.js.map +1 -1
  128. package/dist/cjs/internal/logSpan.js +3 -5
  129. package/dist/cjs/internal/logSpan.js.map +1 -1
  130. package/dist/cjs/internal/metric.js.map +1 -1
  131. package/dist/cjs/internal/pool.js.map +1 -1
  132. package/dist/cjs/internal/pubsub.js +2 -6
  133. package/dist/cjs/internal/pubsub.js.map +1 -1
  134. package/dist/cjs/internal/query.js.map +1 -1
  135. package/dist/cjs/internal/queue.js.map +1 -1
  136. package/dist/cjs/internal/random.js +1 -1
  137. package/dist/cjs/internal/random.js.map +1 -1
  138. package/dist/cjs/internal/rateLimiter.js +44 -0
  139. package/dist/cjs/internal/rateLimiter.js.map +1 -0
  140. package/dist/cjs/internal/ref.js.map +1 -1
  141. package/dist/cjs/internal/reloadable.js +1 -9
  142. package/dist/cjs/internal/reloadable.js.map +1 -1
  143. package/dist/cjs/internal/runtime.js +0 -1
  144. package/dist/cjs/internal/runtime.js.map +1 -1
  145. package/dist/cjs/internal/schedule.js.map +1 -1
  146. package/dist/cjs/internal/scopedCache.js.map +1 -1
  147. package/dist/cjs/internal/scopedRef.js.map +1 -1
  148. package/dist/cjs/internal/sink.js +7 -7
  149. package/dist/cjs/internal/sink.js.map +1 -1
  150. package/dist/cjs/internal/stm/core.js.map +1 -1
  151. package/dist/cjs/internal/stm/stm/stmState.js.map +1 -1
  152. package/dist/cjs/internal/stm/stm/tExit.js +2 -2
  153. package/dist/cjs/internal/stm/stm/tExit.js.map +1 -1
  154. package/dist/cjs/internal/stm/stm/tryCommit.js.map +1 -1
  155. package/dist/cjs/internal/stm/stm.js.map +1 -1
  156. package/dist/cjs/internal/stm/tArray.js.map +1 -1
  157. package/dist/cjs/internal/stm/tDeferred.js +4 -2
  158. package/dist/cjs/internal/stm/tDeferred.js.map +1 -1
  159. package/dist/cjs/internal/stm/tMap.js.map +1 -1
  160. package/dist/cjs/internal/stm/tPriorityQueue.js.map +1 -1
  161. package/dist/cjs/internal/stm/tPubSub.js.map +1 -1
  162. package/dist/cjs/internal/stm/tQueue.js.map +1 -1
  163. package/dist/cjs/internal/stm/tRandom.js +1 -1
  164. package/dist/cjs/internal/stm/tRandom.js.map +1 -1
  165. package/dist/cjs/internal/stm/tReentrantLock.js.map +1 -1
  166. package/dist/cjs/internal/stm/tRef.js.map +1 -1
  167. package/dist/cjs/internal/stm/tSemaphore.js.map +1 -1
  168. package/dist/cjs/internal/stm/tSet.js.map +1 -1
  169. package/dist/cjs/internal/stream/debounceState.js.map +1 -1
  170. package/dist/cjs/internal/stream/handoff.js.map +1 -1
  171. package/dist/cjs/internal/stream/handoffSignal.js.map +1 -1
  172. package/dist/cjs/internal/stream/pull.js.map +1 -1
  173. package/dist/cjs/internal/stream.js +0 -2
  174. package/dist/cjs/internal/stream.js.map +1 -1
  175. package/dist/cjs/internal/subscriptionRef.js.map +1 -1
  176. package/dist/cjs/internal/supervisor.js.map +1 -1
  177. package/dist/cjs/internal/take.js +2 -2
  178. package/dist/cjs/internal/take.js.map +1 -1
  179. package/dist/cjs/internal/testing/sleep.js.map +1 -1
  180. package/dist/cjs/internal/tracer.js +2 -2
  181. package/dist/cjs/internal/tracer.js.map +1 -1
  182. package/dist/cjs/internal/version.js +1 -1
  183. package/dist/dts/Cache.d.ts +20 -20
  184. package/dist/dts/Cache.d.ts.map +1 -1
  185. package/dist/dts/Cause.d.ts +33 -5
  186. package/dist/dts/Cause.d.ts.map +1 -1
  187. package/dist/dts/Channel.d.ts +197 -194
  188. package/dist/dts/Channel.d.ts.map +1 -1
  189. package/dist/dts/Clock.d.ts +7 -7
  190. package/dist/dts/Clock.d.ts.map +1 -1
  191. package/dist/dts/Config.d.ts +1 -1
  192. package/dist/dts/Config.d.ts.map +1 -1
  193. package/dist/dts/ConfigProvider.d.ts +6 -6
  194. package/dist/dts/ConfigProvider.d.ts.map +1 -1
  195. package/dist/dts/Console.d.ts +43 -43
  196. package/dist/dts/Console.d.ts.map +1 -1
  197. package/dist/dts/Context.d.ts +44 -29
  198. package/dist/dts/Context.d.ts.map +1 -1
  199. package/dist/dts/Data.d.ts +38 -57
  200. package/dist/dts/Data.d.ts.map +1 -1
  201. package/dist/dts/Deferred.d.ts +36 -36
  202. package/dist/dts/Deferred.d.ts.map +1 -1
  203. package/dist/dts/Effect.d.ts +732 -729
  204. package/dist/dts/Effect.d.ts.map +1 -1
  205. package/dist/dts/Effectable.d.ts +8 -8
  206. package/dist/dts/Effectable.d.ts.map +1 -1
  207. package/dist/dts/Either.d.ts +2 -3
  208. package/dist/dts/Either.d.ts.map +1 -1
  209. package/dist/dts/Exit.d.ts +74 -74
  210. package/dist/dts/Exit.d.ts.map +1 -1
  211. package/dist/dts/Fiber.d.ts +75 -75
  212. package/dist/dts/Fiber.d.ts.map +1 -1
  213. package/dist/dts/FiberMap.d.ts +22 -22
  214. package/dist/dts/FiberMap.d.ts.map +1 -1
  215. package/dist/dts/FiberRef.d.ts +28 -28
  216. package/dist/dts/FiberRef.d.ts.map +1 -1
  217. package/dist/dts/FiberRefs.d.ts +1 -1
  218. package/dist/dts/FiberRefs.d.ts.map +1 -1
  219. package/dist/dts/FiberSet.d.ts +16 -16
  220. package/dist/dts/FiberSet.d.ts.map +1 -1
  221. package/dist/dts/GroupBy.d.ts +6 -6
  222. package/dist/dts/GroupBy.d.ts.map +1 -1
  223. package/dist/dts/KeyedPool.d.ts +22 -22
  224. package/dist/dts/KeyedPool.d.ts.map +1 -1
  225. package/dist/dts/Layer.d.ts +126 -126
  226. package/dist/dts/Layer.d.ts.map +1 -1
  227. package/dist/dts/LogLevel.d.ts +2 -2
  228. package/dist/dts/LogLevel.d.ts.map +1 -1
  229. package/dist/dts/Logger.d.ts +14 -14
  230. package/dist/dts/Logger.d.ts.map +1 -1
  231. package/dist/dts/MergeDecision.d.ts +7 -7
  232. package/dist/dts/MergeState.d.ts +13 -13
  233. package/dist/dts/MergeState.d.ts.map +1 -1
  234. package/dist/dts/Metric.d.ts +32 -32
  235. package/dist/dts/Metric.d.ts.map +1 -1
  236. package/dist/dts/MetricPolling.d.ts +6 -6
  237. package/dist/dts/MetricPolling.d.ts.map +1 -1
  238. package/dist/dts/Number.d.ts +15 -0
  239. package/dist/dts/Number.d.ts.map +1 -1
  240. package/dist/dts/Option.d.ts +2 -3
  241. package/dist/dts/Option.d.ts.map +1 -1
  242. package/dist/dts/Pool.d.ts +15 -16
  243. package/dist/dts/Pool.d.ts.map +1 -1
  244. package/dist/dts/PubSub.d.ts +18 -18
  245. package/dist/dts/PubSub.d.ts.map +1 -1
  246. package/dist/dts/Queue.d.ts +40 -40
  247. package/dist/dts/Queue.d.ts.map +1 -1
  248. package/dist/dts/Random.d.ts +13 -13
  249. package/dist/dts/Random.d.ts.map +1 -1
  250. package/dist/dts/RateLimiter.d.ts +31 -0
  251. package/dist/dts/RateLimiter.d.ts.map +1 -0
  252. package/dist/dts/ReadonlyArray.d.ts +3 -3
  253. package/dist/dts/ReadonlyRecord.d.ts +37 -8
  254. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  255. package/dist/dts/Ref.d.ts +25 -25
  256. package/dist/dts/Ref.d.ts.map +1 -1
  257. package/dist/dts/Reloadable.d.ts +9 -9
  258. package/dist/dts/Reloadable.d.ts.map +1 -1
  259. package/dist/dts/Request.d.ts +27 -28
  260. package/dist/dts/Request.d.ts.map +1 -1
  261. package/dist/dts/RequestBlock.d.ts +3 -3
  262. package/dist/dts/RequestBlock.d.ts.map +1 -1
  263. package/dist/dts/RequestResolver.d.ts +16 -16
  264. package/dist/dts/RequestResolver.d.ts.map +1 -1
  265. package/dist/dts/Resource.d.ts +7 -7
  266. package/dist/dts/Resource.d.ts.map +1 -1
  267. package/dist/dts/Runtime.d.ts +13 -16
  268. package/dist/dts/Runtime.d.ts.map +1 -1
  269. package/dist/dts/RuntimeFlags.d.ts +10 -10
  270. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  271. package/dist/dts/STM.d.ts +303 -303
  272. package/dist/dts/STM.d.ts.map +1 -1
  273. package/dist/dts/Schedule.d.ts +47 -47
  274. package/dist/dts/Schedule.d.ts.map +1 -1
  275. package/dist/dts/Scope.d.ts +10 -10
  276. package/dist/dts/Scope.d.ts.map +1 -1
  277. package/dist/dts/ScopedCache.d.ts +14 -14
  278. package/dist/dts/ScopedCache.d.ts.map +1 -1
  279. package/dist/dts/ScopedRef.d.ts +5 -5
  280. package/dist/dts/ScopedRef.d.ts.map +1 -1
  281. package/dist/dts/SingleProducerAsyncInput.d.ts +8 -8
  282. package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -1
  283. package/dist/dts/Sink.d.ts +214 -205
  284. package/dist/dts/Sink.d.ts.map +1 -1
  285. package/dist/dts/Stream.d.ts +595 -592
  286. package/dist/dts/Stream.d.ts.map +1 -1
  287. package/dist/dts/StreamEmit.d.ts +5 -5
  288. package/dist/dts/StreamEmit.d.ts.map +1 -1
  289. package/dist/dts/Streamable.d.ts +2 -2
  290. package/dist/dts/Streamable.d.ts.map +1 -1
  291. package/dist/dts/SubscriptionRef.d.ts +41 -41
  292. package/dist/dts/SubscriptionRef.d.ts.map +1 -1
  293. package/dist/dts/Supervisor.d.ts +17 -17
  294. package/dist/dts/Supervisor.d.ts.map +1 -1
  295. package/dist/dts/SynchronizedRef.d.ts +41 -41
  296. package/dist/dts/SynchronizedRef.d.ts.map +1 -1
  297. package/dist/dts/TArray.d.ts +72 -72
  298. package/dist/dts/TArray.d.ts.map +1 -1
  299. package/dist/dts/TDeferred.d.ts +12 -12
  300. package/dist/dts/TDeferred.d.ts.map +1 -1
  301. package/dist/dts/TMap.d.ts +67 -67
  302. package/dist/dts/TMap.d.ts.map +1 -1
  303. package/dist/dts/TPriorityQueue.d.ts +23 -23
  304. package/dist/dts/TPriorityQueue.d.ts.map +1 -1
  305. package/dist/dts/TPubSub.d.ts +15 -15
  306. package/dist/dts/TPubSub.d.ts.map +1 -1
  307. package/dist/dts/TQueue.d.ts +40 -40
  308. package/dist/dts/TQueue.d.ts.map +1 -1
  309. package/dist/dts/TRandom.d.ts +13 -13
  310. package/dist/dts/TRandom.d.ts.map +1 -1
  311. package/dist/dts/TReentrantLock.d.ts +21 -21
  312. package/dist/dts/TReentrantLock.d.ts.map +1 -1
  313. package/dist/dts/TRef.d.ts +25 -25
  314. package/dist/dts/TRef.d.ts.map +1 -1
  315. package/dist/dts/TSemaphore.d.ts +15 -15
  316. package/dist/dts/TSemaphore.d.ts.map +1 -1
  317. package/dist/dts/TSet.d.ts +49 -49
  318. package/dist/dts/TSet.d.ts.map +1 -1
  319. package/dist/dts/Take.d.ts +41 -41
  320. package/dist/dts/Take.d.ts.map +1 -1
  321. package/dist/dts/TestAnnotation.d.ts +1 -3
  322. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  323. package/dist/dts/TestAnnotations.d.ts +3 -3
  324. package/dist/dts/TestAnnotations.d.ts.map +1 -1
  325. package/dist/dts/TestClock.d.ts +18 -18
  326. package/dist/dts/TestClock.d.ts.map +1 -1
  327. package/dist/dts/TestConfig.d.ts.map +1 -1
  328. package/dist/dts/TestContext.d.ts +2 -2
  329. package/dist/dts/TestContext.d.ts.map +1 -1
  330. package/dist/dts/TestLive.d.ts +1 -1
  331. package/dist/dts/TestLive.d.ts.map +1 -1
  332. package/dist/dts/TestServices.d.ts +31 -31
  333. package/dist/dts/TestServices.d.ts.map +1 -1
  334. package/dist/dts/TestSized.d.ts +2 -2
  335. package/dist/dts/TestSized.d.ts.map +1 -1
  336. package/dist/dts/Tracer.d.ts +1 -1
  337. package/dist/dts/Utils.d.ts.map +1 -1
  338. package/dist/dts/index.d.ts +12 -2
  339. package/dist/dts/index.d.ts.map +1 -1
  340. package/dist/dts/internal/channel/channelExecutor.d.ts +1 -1
  341. package/dist/dts/internal/channel/channelExecutor.d.ts.map +1 -1
  342. package/dist/dts/internal/core-stream.d.ts +1 -1
  343. package/dist/dts/internal/core-stream.d.ts.map +1 -1
  344. package/dist/dts/internal/rateLimiter.d.ts +2 -0
  345. package/dist/dts/internal/rateLimiter.d.ts.map +1 -0
  346. package/dist/dts/internal/stm/stm.d.ts +6 -6
  347. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  348. package/dist/dts/internal/version.d.ts +1 -1
  349. package/dist/esm/Cause.js +13 -0
  350. package/dist/esm/Cause.js.map +1 -1
  351. package/dist/esm/Channel.js.map +1 -1
  352. package/dist/esm/Clock.js.map +1 -1
  353. package/dist/esm/Console.js.map +1 -1
  354. package/dist/esm/Context.js +22 -24
  355. package/dist/esm/Context.js.map +1 -1
  356. package/dist/esm/Data.js +4 -5
  357. package/dist/esm/Data.js.map +1 -1
  358. package/dist/esm/Deferred.js +1 -1
  359. package/dist/esm/Deferred.js.map +1 -1
  360. package/dist/esm/Effect.js +9 -9
  361. package/dist/esm/Effect.js.map +1 -1
  362. package/dist/esm/Effectable.js.map +1 -1
  363. package/dist/esm/Either.js.map +1 -1
  364. package/dist/esm/Exit.js +2 -2
  365. package/dist/esm/Exit.js.map +1 -1
  366. package/dist/esm/Fiber.js.map +1 -1
  367. package/dist/esm/FiberMap.js +3 -3
  368. package/dist/esm/FiberRef.js.map +1 -1
  369. package/dist/esm/FiberRefs.js.map +1 -1
  370. package/dist/esm/FiberSet.js +3 -3
  371. package/dist/esm/FiberSet.js.map +1 -1
  372. package/dist/esm/GroupBy.js.map +1 -1
  373. package/dist/esm/Layer.js.map +1 -1
  374. package/dist/esm/LogLevel.js.map +1 -1
  375. package/dist/esm/Logger.js.map +1 -1
  376. package/dist/esm/Metric.js.map +1 -1
  377. package/dist/esm/Number.js +18 -0
  378. package/dist/esm/Number.js.map +1 -1
  379. package/dist/esm/Option.js.map +1 -1
  380. package/dist/esm/Pool.js.map +1 -1
  381. package/dist/esm/PubSub.js.map +1 -1
  382. package/dist/esm/Queue.js.map +1 -1
  383. package/dist/esm/Random.js.map +1 -1
  384. package/dist/esm/RateLimiter.js +7 -0
  385. package/dist/esm/RateLimiter.js.map +1 -0
  386. package/dist/esm/ReadonlyRecord.js +44 -8
  387. package/dist/esm/ReadonlyRecord.js.map +1 -1
  388. package/dist/esm/Ref.js.map +1 -1
  389. package/dist/esm/Request.js.map +1 -1
  390. package/dist/esm/RequestResolver.js.map +1 -1
  391. package/dist/esm/Resource.js.map +1 -1
  392. package/dist/esm/Runtime.js +1 -4
  393. package/dist/esm/Runtime.js.map +1 -1
  394. package/dist/esm/RuntimeFlags.js.map +1 -1
  395. package/dist/esm/STM.js.map +1 -1
  396. package/dist/esm/Schedule.js.map +1 -1
  397. package/dist/esm/Scope.js.map +1 -1
  398. package/dist/esm/ScopedRef.js.map +1 -1
  399. package/dist/esm/SingleProducerAsyncInput.js.map +1 -1
  400. package/dist/esm/Sink.js.map +1 -1
  401. package/dist/esm/Stream.js.map +1 -1
  402. package/dist/esm/SubscriptionRef.js.map +1 -1
  403. package/dist/esm/Supervisor.js.map +1 -1
  404. package/dist/esm/SynchronizedRef.js.map +1 -1
  405. package/dist/esm/TArray.js.map +1 -1
  406. package/dist/esm/TDeferred.js.map +1 -1
  407. package/dist/esm/TMap.js.map +1 -1
  408. package/dist/esm/TPriorityQueue.js.map +1 -1
  409. package/dist/esm/TPubSub.js.map +1 -1
  410. package/dist/esm/TQueue.js.map +1 -1
  411. package/dist/esm/TRandom.js.map +1 -1
  412. package/dist/esm/TReentrantLock.js.map +1 -1
  413. package/dist/esm/TRef.js.map +1 -1
  414. package/dist/esm/TSemaphore.js.map +1 -1
  415. package/dist/esm/TSet.js.map +1 -1
  416. package/dist/esm/Take.js +6 -6
  417. package/dist/esm/Take.js.map +1 -1
  418. package/dist/esm/TestAnnotation.js +10 -13
  419. package/dist/esm/TestAnnotation.js.map +1 -1
  420. package/dist/esm/TestAnnotations.js +1 -1
  421. package/dist/esm/TestAnnotations.js.map +1 -1
  422. package/dist/esm/TestClock.js +1 -1
  423. package/dist/esm/TestClock.js.map +1 -1
  424. package/dist/esm/TestConfig.js +1 -1
  425. package/dist/esm/TestConfig.js.map +1 -1
  426. package/dist/esm/TestContext.js.map +1 -1
  427. package/dist/esm/TestLive.js +1 -1
  428. package/dist/esm/TestLive.js.map +1 -1
  429. package/dist/esm/TestServices.js.map +1 -1
  430. package/dist/esm/TestSized.js +1 -1
  431. package/dist/esm/TestSized.js.map +1 -1
  432. package/dist/esm/Utils.js +1 -1
  433. package/dist/esm/Utils.js.map +1 -1
  434. package/dist/esm/index.js +12 -2
  435. package/dist/esm/index.js.map +1 -1
  436. package/dist/esm/internal/cache.js.map +1 -1
  437. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  438. package/dist/esm/internal/channel/mergeDecision.js +2 -6
  439. package/dist/esm/internal/channel/mergeDecision.js.map +1 -1
  440. package/dist/esm/internal/channel/singleProducerAsyncInput.js.map +1 -1
  441. package/dist/esm/internal/channel.js +1 -1
  442. package/dist/esm/internal/channel.js.map +1 -1
  443. package/dist/esm/internal/clock.js +1 -1
  444. package/dist/esm/internal/clock.js.map +1 -1
  445. package/dist/esm/internal/configProvider.js +2 -4
  446. package/dist/esm/internal/configProvider.js.map +1 -1
  447. package/dist/esm/internal/console.js.map +1 -1
  448. package/dist/esm/internal/context.js +28 -20
  449. package/dist/esm/internal/context.js.map +1 -1
  450. package/dist/esm/internal/core-effect.js +12 -26
  451. package/dist/esm/internal/core-effect.js.map +1 -1
  452. package/dist/esm/internal/core-stream.js.map +1 -1
  453. package/dist/esm/internal/core.js +57 -127
  454. package/dist/esm/internal/core.js.map +1 -1
  455. package/dist/esm/internal/data.js.map +1 -1
  456. package/dist/esm/internal/defaultServices/console.js +1 -1
  457. package/dist/esm/internal/defaultServices/console.js.map +1 -1
  458. package/dist/esm/internal/defaultServices.js.map +1 -1
  459. package/dist/esm/internal/deferred.js.map +1 -1
  460. package/dist/esm/internal/differ/contextPatch.js +9 -9
  461. package/dist/esm/internal/differ/contextPatch.js.map +1 -1
  462. package/dist/esm/internal/effect/circular.js +5 -8
  463. package/dist/esm/internal/effect/circular.js.map +1 -1
  464. package/dist/esm/internal/effectable.js +4 -4
  465. package/dist/esm/internal/effectable.js.map +1 -1
  466. package/dist/esm/internal/fiber.js +2 -6
  467. package/dist/esm/internal/fiber.js.map +1 -1
  468. package/dist/esm/internal/fiberRuntime.js +10 -19
  469. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  470. package/dist/esm/internal/groupBy.js.map +1 -1
  471. package/dist/esm/internal/keyedPool.js.map +1 -1
  472. package/dist/esm/internal/layer/circular.js.map +1 -1
  473. package/dist/esm/internal/layer.js +3 -3
  474. package/dist/esm/internal/layer.js.map +1 -1
  475. package/dist/esm/internal/logSpan.js +3 -5
  476. package/dist/esm/internal/logSpan.js.map +1 -1
  477. package/dist/esm/internal/metric.js.map +1 -1
  478. package/dist/esm/internal/pool.js.map +1 -1
  479. package/dist/esm/internal/pubsub.js +1 -5
  480. package/dist/esm/internal/pubsub.js.map +1 -1
  481. package/dist/esm/internal/query.js.map +1 -1
  482. package/dist/esm/internal/queue.js.map +1 -1
  483. package/dist/esm/internal/random.js +1 -1
  484. package/dist/esm/internal/random.js.map +1 -1
  485. package/dist/esm/internal/rateLimiter.js +12 -0
  486. package/dist/esm/internal/rateLimiter.js.map +1 -0
  487. package/dist/esm/internal/ref.js.map +1 -1
  488. package/dist/esm/internal/reloadable.js +1 -9
  489. package/dist/esm/internal/reloadable.js.map +1 -1
  490. package/dist/esm/internal/runtime.js +0 -1
  491. package/dist/esm/internal/runtime.js.map +1 -1
  492. package/dist/esm/internal/schedule.js.map +1 -1
  493. package/dist/esm/internal/scopedCache.js.map +1 -1
  494. package/dist/esm/internal/scopedRef.js.map +1 -1
  495. package/dist/esm/internal/sink.js +7 -7
  496. package/dist/esm/internal/sink.js.map +1 -1
  497. package/dist/esm/internal/stm/core.js.map +1 -1
  498. package/dist/esm/internal/stm/stm/stmState.js.map +1 -1
  499. package/dist/esm/internal/stm/stm/tExit.js +2 -2
  500. package/dist/esm/internal/stm/stm/tExit.js.map +1 -1
  501. package/dist/esm/internal/stm/stm/tryCommit.js.map +1 -1
  502. package/dist/esm/internal/stm/stm.js.map +1 -1
  503. package/dist/esm/internal/stm/tArray.js.map +1 -1
  504. package/dist/esm/internal/stm/tDeferred.js +4 -2
  505. package/dist/esm/internal/stm/tDeferred.js.map +1 -1
  506. package/dist/esm/internal/stm/tMap.js.map +1 -1
  507. package/dist/esm/internal/stm/tPriorityQueue.js.map +1 -1
  508. package/dist/esm/internal/stm/tPubSub.js.map +1 -1
  509. package/dist/esm/internal/stm/tQueue.js.map +1 -1
  510. package/dist/esm/internal/stm/tRandom.js +1 -1
  511. package/dist/esm/internal/stm/tRandom.js.map +1 -1
  512. package/dist/esm/internal/stm/tReentrantLock.js.map +1 -1
  513. package/dist/esm/internal/stm/tRef.js.map +1 -1
  514. package/dist/esm/internal/stm/tSemaphore.js.map +1 -1
  515. package/dist/esm/internal/stm/tSet.js.map +1 -1
  516. package/dist/esm/internal/stream/debounceState.js.map +1 -1
  517. package/dist/esm/internal/stream/handoff.js.map +1 -1
  518. package/dist/esm/internal/stream/handoffSignal.js.map +1 -1
  519. package/dist/esm/internal/stream/pull.js.map +1 -1
  520. package/dist/esm/internal/stream.js +0 -2
  521. package/dist/esm/internal/stream.js.map +1 -1
  522. package/dist/esm/internal/subscriptionRef.js.map +1 -1
  523. package/dist/esm/internal/supervisor.js.map +1 -1
  524. package/dist/esm/internal/take.js +2 -2
  525. package/dist/esm/internal/take.js.map +1 -1
  526. package/dist/esm/internal/testing/sleep.js.map +1 -1
  527. package/dist/esm/internal/tracer.js +2 -2
  528. package/dist/esm/internal/tracer.js.map +1 -1
  529. package/dist/esm/internal/version.js +1 -1
  530. package/package.json +9 -1
  531. package/src/Cache.ts +20 -20
  532. package/src/Cause.ts +37 -13
  533. package/src/Channel.ts +802 -794
  534. package/src/Clock.ts +7 -7
  535. package/src/Config.ts +1 -1
  536. package/src/ConfigProvider.ts +6 -6
  537. package/src/Console.ts +44 -48
  538. package/src/Context.ts +52 -30
  539. package/src/Data.ts +38 -61
  540. package/src/Deferred.ts +39 -41
  541. package/src/Effect.ts +1187 -1206
  542. package/src/Effectable.ts +8 -8
  543. package/src/Either.ts +2 -3
  544. package/src/Exit.ts +88 -105
  545. package/src/Fiber.ts +77 -83
  546. package/src/FiberMap.ts +77 -77
  547. package/src/FiberRef.ts +28 -28
  548. package/src/FiberRefs.ts +1 -1
  549. package/src/FiberSet.ts +61 -62
  550. package/src/GroupBy.ts +8 -12
  551. package/src/KeyedPool.ts +22 -22
  552. package/src/Layer.ts +187 -181
  553. package/src/LogLevel.ts +7 -6
  554. package/src/Logger.ts +18 -18
  555. package/src/MergeDecision.ts +7 -7
  556. package/src/MergeState.ts +16 -16
  557. package/src/Metric.ts +39 -39
  558. package/src/MetricPolling.ts +6 -6
  559. package/src/Number.ts +19 -0
  560. package/src/Option.ts +2 -3
  561. package/src/Pool.ts +15 -16
  562. package/src/PubSub.ts +18 -18
  563. package/src/Queue.ts +43 -46
  564. package/src/Random.ts +13 -15
  565. package/src/RateLimiter.ts +37 -0
  566. package/src/ReadonlyRecord.ts +49 -8
  567. package/src/Ref.ts +25 -25
  568. package/src/Reloadable.ts +10 -10
  569. package/src/Request.ts +31 -31
  570. package/src/RequestBlock.ts +3 -3
  571. package/src/RequestResolver.ts +21 -21
  572. package/src/Resource.ts +13 -13
  573. package/src/Runtime.ts +16 -19
  574. package/src/RuntimeFlags.ts +10 -10
  575. package/src/STM.ts +361 -362
  576. package/src/Schedule.ts +47 -47
  577. package/src/Scheduler.ts +2 -2
  578. package/src/Scope.ts +14 -15
  579. package/src/ScopedCache.ts +14 -14
  580. package/src/ScopedRef.ts +7 -7
  581. package/src/SingleProducerAsyncInput.ts +8 -9
  582. package/src/Sink.ts +357 -381
  583. package/src/Stream.ts +935 -1033
  584. package/src/StreamEmit.ts +5 -5
  585. package/src/Streamable.ts +2 -2
  586. package/src/SubscriptionRef.ts +51 -51
  587. package/src/Supervisor.ts +26 -26
  588. package/src/SynchronizedRef.ts +44 -44
  589. package/src/TArray.ts +74 -74
  590. package/src/TDeferred.ts +14 -14
  591. package/src/TMap.ts +72 -72
  592. package/src/TPriorityQueue.ts +23 -24
  593. package/src/TPubSub.ts +15 -15
  594. package/src/TQueue.ts +40 -40
  595. package/src/TRandom.ts +13 -13
  596. package/src/TReentrantLock.ts +21 -21
  597. package/src/TRef.ts +25 -25
  598. package/src/TSemaphore.ts +15 -15
  599. package/src/TSet.ts +49 -49
  600. package/src/Take.ts +51 -51
  601. package/src/TestAnnotation.ts +6 -17
  602. package/src/TestAnnotations.ts +7 -9
  603. package/src/TestClock.ts +39 -45
  604. package/src/TestConfig.ts +1 -3
  605. package/src/TestContext.ts +3 -3
  606. package/src/TestLive.ts +3 -5
  607. package/src/TestServices.ts +45 -47
  608. package/src/TestSized.ts +5 -5
  609. package/src/Tracer.ts +1 -1
  610. package/src/Utils.ts +8 -10
  611. package/src/index.ts +13 -2
  612. package/src/internal/blockedRequests.ts +2 -2
  613. package/src/internal/cache.ts +38 -38
  614. package/src/internal/channel/channelExecutor.ts +65 -73
  615. package/src/internal/channel/channelState.ts +11 -11
  616. package/src/internal/channel/continuation.ts +10 -10
  617. package/src/internal/channel/mergeDecision.ts +14 -16
  618. package/src/internal/channel/mergeState.ts +12 -12
  619. package/src/internal/channel/singleProducerAsyncInput.ts +15 -17
  620. package/src/internal/channel/subexecutor.ts +7 -7
  621. package/src/internal/channel.ts +901 -980
  622. package/src/internal/clock.ts +6 -6
  623. package/src/internal/concurrency.ts +9 -9
  624. package/src/internal/configProvider.ts +29 -36
  625. package/src/internal/console.ts +12 -12
  626. package/src/internal/context.ts +32 -23
  627. package/src/internal/core-effect.ts +655 -616
  628. package/src/internal/core-stream.ts +317 -325
  629. package/src/internal/core.ts +856 -790
  630. package/src/internal/data.ts +2 -3
  631. package/src/internal/dataSource.ts +14 -14
  632. package/src/internal/defaultServices/console.ts +3 -1
  633. package/src/internal/defaultServices.ts +21 -21
  634. package/src/internal/deferred.ts +9 -9
  635. package/src/internal/differ/contextPatch.ts +17 -17
  636. package/src/internal/effect/circular.ts +154 -159
  637. package/src/internal/effectable.ts +7 -7
  638. package/src/internal/fiber.ts +55 -59
  639. package/src/internal/fiberRefs.ts +1 -1
  640. package/src/internal/fiberRuntime.ts +426 -463
  641. package/src/internal/groupBy.ts +59 -62
  642. package/src/internal/keyedPool.ts +37 -37
  643. package/src/internal/layer/circular.ts +37 -37
  644. package/src/internal/layer.ts +235 -240
  645. package/src/internal/logSpan.ts +3 -5
  646. package/src/internal/metric/polling.ts +5 -5
  647. package/src/internal/metric.ts +54 -55
  648. package/src/internal/pool.ts +72 -72
  649. package/src/internal/pubsub.ts +75 -84
  650. package/src/internal/query.ts +25 -27
  651. package/src/internal/queue.ts +65 -70
  652. package/src/internal/random.ts +9 -9
  653. package/src/internal/rateLimiter.ts +30 -0
  654. package/src/internal/ref.ts +24 -24
  655. package/src/internal/reloadable.ts +11 -31
  656. package/src/internal/request.ts +14 -14
  657. package/src/internal/resource.ts +8 -8
  658. package/src/internal/runtime.ts +21 -22
  659. package/src/internal/schedule.ts +131 -134
  660. package/src/internal/scopedCache.ts +35 -32
  661. package/src/internal/scopedRef.ts +14 -14
  662. package/src/internal/sink.ts +507 -565
  663. package/src/internal/stm/core.ts +101 -102
  664. package/src/internal/stm/stm/stmState.ts +10 -10
  665. package/src/internal/stm/stm/tExit.ts +18 -18
  666. package/src/internal/stm/stm/tryCommit.ts +5 -5
  667. package/src/internal/stm/stm.ts +363 -374
  668. package/src/internal/stm/tArray.ts +92 -92
  669. package/src/internal/stm/tDeferred.ts +16 -14
  670. package/src/internal/stm/tMap.ts +83 -84
  671. package/src/internal/stm/tPriorityQueue.ts +24 -25
  672. package/src/internal/stm/tPubSub.ts +37 -38
  673. package/src/internal/stm/tQueue.ts +44 -48
  674. package/src/internal/stm/tRandom.ts +18 -18
  675. package/src/internal/stm/tReentrantLock.ts +28 -28
  676. package/src/internal/stm/tRef.ts +25 -25
  677. package/src/internal/stm/tSemaphore.ts +16 -16
  678. package/src/internal/stm/tSet.ts +51 -52
  679. package/src/internal/stream/debounceState.ts +7 -7
  680. package/src/internal/stream/emit.ts +4 -4
  681. package/src/internal/stream/handoff.ts +19 -19
  682. package/src/internal/stream/handoffSignal.ts +4 -4
  683. package/src/internal/stream/pull.ts +10 -11
  684. package/src/internal/stream.ts +1770 -1788
  685. package/src/internal/subscriptionRef.ts +17 -17
  686. package/src/internal/supervisor.ts +49 -56
  687. package/src/internal/synchronizedRef.ts +27 -27
  688. package/src/internal/take.ts +61 -61
  689. package/src/internal/testing/sleep.ts +2 -2
  690. package/src/internal/testing/suspendedWarningData.ts +2 -2
  691. package/src/internal/testing/warningData.ts +2 -2
  692. package/src/internal/tracer.ts +2 -6
  693. package/src/internal/version.ts +1 -1
@@ -30,22 +30,24 @@ export const SinkTypeId: Sink.SinkTypeId = Symbol.for("effect/Sink") as Sink.Sin
30
30
 
31
31
  const sinkVariance = {
32
32
  /* c8 ignore next */
33
- _R: (_: never) => _,
34
- /* c8 ignore next */
35
- _E: (_: never) => _,
33
+ _A: (_: never) => _,
36
34
  /* c8 ignore next */
37
35
  _In: (_: unknown) => _,
38
36
  /* c8 ignore next */
39
37
  _L: (_: never) => _,
40
38
  /* c8 ignore next */
41
- _Z: (_: never) => _
39
+ _E: (_: never) => _,
40
+ /* c8 ignore next */
41
+ _R: (_: never) => _
42
42
  }
43
43
 
44
44
  /** @internal */
45
- export class SinkImpl<out R, out E, in In, out L, out Z> implements Sink.Sink<R, E, In, L, Z> {
45
+ export class SinkImpl<out A, in In = unknown, out L = never, out E = never, out R = never>
46
+ implements Sink.Sink<A, In, L, E, R>
47
+ {
46
48
  readonly [SinkTypeId] = sinkVariance
47
49
  constructor(
48
- readonly channel: Channel.Channel<R, never, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<L>, Z>
50
+ readonly channel: Channel.Channel<Chunk.Chunk<L>, Chunk.Chunk<In>, E, never, A, unknown, R>
49
51
  ) {
50
52
  }
51
53
  pipe() {
@@ -58,26 +60,25 @@ export const isSink = (u: unknown): u is Sink.Sink<unknown, unknown, unknown, un
58
60
  hasProperty(u, SinkTypeId)
59
61
 
60
62
  /** @internal */
61
- export const suspend = <R, E, In, L, Z>(evaluate: LazyArg<Sink.Sink<R, E, In, L, Z>>): Sink.Sink<R, E, In, L, Z> =>
63
+ export const suspend = <A, In, L, E, R>(evaluate: LazyArg<Sink.Sink<A, In, L, E, R>>): Sink.Sink<A, In, L, E, R> =>
62
64
  new SinkImpl(core.suspend(() => toChannel(evaluate())))
63
65
 
64
66
  /** @internal */
65
67
  export const as = dual<
66
- <Z2>(z: Z2) => <R, E, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In, L, Z2>,
67
- <R, E, In, L, Z, Z2>(self: Sink.Sink<R, E, In, L, Z>, z: Z2) => Sink.Sink<R, E, In, L, Z2>
68
+ <A2>(a: A2) => <A, In, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In, L, E, R>,
69
+ <A, In, L, E, R, A2>(self: Sink.Sink<A, In, L, E, R>, a: A2) => Sink.Sink<A2, In, L, E, R>
68
70
  >(
69
71
  2,
70
- <R, E, In, L, Z, Z2>(self: Sink.Sink<R, E, In, L, Z>, z: Z2): Sink.Sink<R, E, In, L, Z2> => pipe(self, map(() => z))
72
+ (self, a) => pipe(self, map(() => a))
71
73
  )
72
74
 
73
75
  /** @internal */
74
- export const collectAll = <In>(): Sink.Sink<never, never, In, never, Chunk.Chunk<In>> =>
75
- new SinkImpl(collectAllLoop(Chunk.empty()))
76
+ export const collectAll = <In>(): Sink.Sink<Chunk.Chunk<In>, In> => new SinkImpl(collectAllLoop(Chunk.empty()))
76
77
 
77
78
  /** @internal */
78
79
  const collectAllLoop = <In>(
79
80
  acc: Chunk.Chunk<In>
80
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, never, Chunk.Chunk<In>> =>
81
+ ): Channel.Channel<never, Chunk.Chunk<In>, never, never, Chunk.Chunk<In>, unknown> =>
81
82
  core.readWithCause({
82
83
  onInput: (chunk: Chunk.Chunk<In>) => collectAllLoop(pipe(acc, Chunk.appendAll(chunk))),
83
84
  onFailure: core.failCause,
@@ -85,14 +86,14 @@ const collectAllLoop = <In>(
85
86
  })
86
87
 
87
88
  /** @internal */
88
- export const collectAllN = <In>(n: number): Sink.Sink<never, never, In, In, Chunk.Chunk<In>> =>
89
+ export const collectAllN = <In>(n: number): Sink.Sink<Chunk.Chunk<In>, In, In> =>
89
90
  suspend(() => fromChannel(collectAllNLoop(n, Chunk.empty())))
90
91
 
91
92
  /** @internal */
92
93
  const collectAllNLoop = <In>(
93
94
  n: number,
94
95
  acc: Chunk.Chunk<In>
95
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, Chunk.Chunk<In>> =>
96
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, Chunk.Chunk<In>, unknown> =>
96
97
  core.readWithCause({
97
98
  onInput: (chunk: Chunk.Chunk<In>) => {
98
99
  const [collected, leftovers] = Chunk.splitAt(chunk, n)
@@ -109,20 +110,20 @@ const collectAllNLoop = <In>(
109
110
  })
110
111
 
111
112
  /** @internal */
112
- export const collectAllFrom = <R, E, In, L extends In, Z>(
113
- self: Sink.Sink<R, E, In, L, Z>
114
- ): Sink.Sink<R, E, In, L, Chunk.Chunk<Z>> =>
113
+ export const collectAllFrom = <A, In, L extends In, E, R>(
114
+ self: Sink.Sink<A, In, L, E, R>
115
+ ): Sink.Sink<Chunk.Chunk<A>, In, L, E, R> =>
115
116
  collectAllWhileWith(self, {
116
- initial: Chunk.empty<Z>(),
117
+ initial: Chunk.empty<A>(),
117
118
  while: constTrue,
118
- body: (chunk, z) => pipe(chunk, Chunk.append(z))
119
+ body: (chunk, a) => pipe(chunk, Chunk.append(a))
119
120
  })
120
121
 
121
122
  /** @internal */
122
123
  export const collectAllToMap = <In, K>(
123
124
  key: (input: In) => K,
124
125
  merge: (x: In, y: In) => In
125
- ): Sink.Sink<never, never, In, never, HashMap.HashMap<K, In>> => {
126
+ ): Sink.Sink<HashMap.HashMap<K, In>, In> => {
126
127
  return pipe(
127
128
  foldLeftChunks(HashMap.empty<K, In>(), (map, chunk) =>
128
129
  pipe(
@@ -143,7 +144,7 @@ export const collectAllToMapN = <In, K>(
143
144
  n: number,
144
145
  key: (input: In) => K,
145
146
  merge: (x: In, y: In) => In
146
- ): Sink.Sink<never, never, In, In, HashMap.HashMap<K, In>> => {
147
+ ): Sink.Sink<HashMap.HashMap<K, In>, In, In> => {
147
148
  return foldWeighted<HashMap.HashMap<K, In>, In>({
148
149
  initial: HashMap.empty(),
149
150
  maxCost: n,
@@ -159,14 +160,14 @@ export const collectAllToMapN = <In, K>(
159
160
  }
160
161
 
161
162
  /** @internal */
162
- export const collectAllToSet = <In>(): Sink.Sink<never, never, In, never, HashSet.HashSet<In>> =>
163
+ export const collectAllToSet = <In>(): Sink.Sink<HashSet.HashSet<In>, In> =>
163
164
  foldLeftChunks<HashSet.HashSet<In>, In>(
164
165
  HashSet.empty(),
165
166
  (acc, chunk) => pipe(chunk, Chunk.reduce(acc, (acc, input) => pipe(acc, HashSet.add(input))))
166
167
  )
167
168
 
168
169
  /** @internal */
169
- export const collectAllToSetN = <In>(n: number): Sink.Sink<never, never, In, In, HashSet.HashSet<In>> =>
170
+ export const collectAllToSetN = <In>(n: number): Sink.Sink<HashSet.HashSet<In>, In, In> =>
170
171
  foldWeighted<HashSet.HashSet<In>, In>({
171
172
  initial: HashSet.empty(),
172
173
  maxCost: n,
@@ -175,7 +176,7 @@ export const collectAllToSetN = <In>(n: number): Sink.Sink<never, never, In, In,
175
176
  })
176
177
 
177
178
  /** @internal */
178
- export const collectAllUntil = <In>(p: Predicate<In>): Sink.Sink<never, never, In, In, Chunk.Chunk<In>> => {
179
+ export const collectAllUntil = <In>(p: Predicate<In>): Sink.Sink<Chunk.Chunk<In>, In, In> => {
179
180
  return pipe(
180
181
  fold<[Chunk.Chunk<In>, boolean], In>(
181
182
  [Chunk.empty(), true],
@@ -187,9 +188,9 @@ export const collectAllUntil = <In>(p: Predicate<In>): Sink.Sink<never, never, I
187
188
  }
188
189
 
189
190
  /** @internal */
190
- export const collectAllUntilEffect = <In, R, E>(p: (input: In) => Effect.Effect<R, E, boolean>) => {
191
+ export const collectAllUntilEffect = <In, E, R>(p: (input: In) => Effect.Effect<boolean, E, R>) => {
191
192
  return pipe(
192
- foldEffect<[Chunk.Chunk<In>, boolean], R, E, In>(
193
+ foldEffect<[Chunk.Chunk<In>, boolean], In, E, R>(
193
194
  [Chunk.empty(), true],
194
195
  (tuple) => tuple[1],
195
196
  ([chunk, _], input) => pipe(p(input), Effect.map((bool) => [pipe(chunk, Chunk.append(input)), !bool]))
@@ -200,16 +201,16 @@ export const collectAllUntilEffect = <In, R, E>(p: (input: In) => Effect.Effect<
200
201
 
201
202
  /** @internal */
202
203
  export const collectAllWhile: {
203
- <In, Out extends In>(refinement: Refinement<In, Out>): Sink.Sink<never, never, In, In, Chunk.Chunk<Out>>
204
- <In>(predicate: Predicate<In>): Sink.Sink<never, never, In, In, Chunk.Chunk<In>>
205
- } = <In>(predicate: Predicate<In>): Sink.Sink<never, never, In, In, Chunk.Chunk<In>> =>
204
+ <In, Out extends In>(refinement: Refinement<In, Out>): Sink.Sink<Chunk.Chunk<Out>, In, In>
205
+ <In>(predicate: Predicate<In>): Sink.Sink<Chunk.Chunk<In>, In, In>
206
+ } = <In>(predicate: Predicate<In>): Sink.Sink<Chunk.Chunk<In>, In, In> =>
206
207
  fromChannel(collectAllWhileReader(predicate, Chunk.empty()))
207
208
 
208
209
  /** @internal */
209
210
  const collectAllWhileReader = <In>(
210
211
  predicate: Predicate<In>,
211
212
  done: Chunk.Chunk<In>
212
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, Chunk.Chunk<In>> =>
213
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, Chunk.Chunk<In>, unknown> =>
213
214
  core.readWith({
214
215
  onInput: (input: Chunk.Chunk<In>) => {
215
216
  const [collected, leftovers] = pipe(Chunk.toReadonlyArray(input), ReadonlyArray.span(predicate))
@@ -229,15 +230,15 @@ const collectAllWhileReader = <In>(
229
230
  })
230
231
 
231
232
  /** @internal */
232
- export const collectAllWhileEffect = <In, R, E>(
233
- predicate: (input: In) => Effect.Effect<R, E, boolean>
234
- ): Sink.Sink<R, E, In, In, Chunk.Chunk<In>> => fromChannel(collectAllWhileEffectReader(predicate, Chunk.empty()))
233
+ export const collectAllWhileEffect = <In, E, R>(
234
+ predicate: (input: In) => Effect.Effect<boolean, E, R>
235
+ ): Sink.Sink<Chunk.Chunk<In>, In, In, E, R> => fromChannel(collectAllWhileEffectReader(predicate, Chunk.empty()))
235
236
 
236
237
  /** @internal */
237
238
  const collectAllWhileEffectReader = <In, R, E>(
238
- predicate: (input: In) => Effect.Effect<R, E, boolean>,
239
+ predicate: (input: In) => Effect.Effect<boolean, E, R>,
239
240
  done: Chunk.Chunk<In>
240
- ): Channel.Channel<R, never, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<In>, Chunk.Chunk<In>> =>
241
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E, never, Chunk.Chunk<In>, unknown, R> =>
241
242
  core.readWith({
242
243
  onInput: (input: Chunk.Chunk<In>) =>
243
244
  pipe(
@@ -255,32 +256,32 @@ const collectAllWhileEffectReader = <In, R, E>(
255
256
  })
256
257
 
257
258
  /** @internal */
258
- export const collectAllWhileWith = dual<
259
- <Z, S>(
259
+ export const collectAllWhileWith: {
260
+ <A, S>(
260
261
  options: {
261
262
  readonly initial: S
262
- readonly while: Predicate<Z>
263
- readonly body: (s: S, z: Z) => S
263
+ readonly while: Predicate<A>
264
+ readonly body: (s: S, a: A) => S
264
265
  }
265
- ) => <R, E, In, L extends In>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In, L, S>,
266
- <R, E, In, L extends In, Z, S>(
267
- self: Sink.Sink<R, E, In, L, Z>,
266
+ ): <In, L extends In, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<S, In, L, E, R>
267
+ <A, In, L extends In, E, R, S>(
268
+ self: Sink.Sink<A, In, L, E, R>,
268
269
  options: {
269
270
  readonly initial: S
270
- readonly while: Predicate<Z>
271
- readonly body: (s: S, z: Z) => S
271
+ readonly while: Predicate<A>
272
+ readonly body: (s: S, a: A) => S
272
273
  }
273
- ) => Sink.Sink<R, E, In, L, S>
274
- >(
274
+ ): Sink.Sink<S, In, L, E, R>
275
+ } = dual(
275
276
  2,
276
- <R, E, In, L extends In, Z, S>(
277
- self: Sink.Sink<R, E, In, L, Z>,
277
+ <A, In, L extends In, E, R, S>(
278
+ self: Sink.Sink<A, In, L, E, R>,
278
279
  options: {
279
280
  readonly initial: S
280
- readonly while: Predicate<Z>
281
- readonly body: (s: S, z: Z) => S
281
+ readonly while: Predicate<A>
282
+ readonly body: (s: S, a: A) => S
282
283
  }
283
- ): Sink.Sink<R, E, In, L, S> => {
284
+ ): Sink.Sink<S, In, L, E, R> => {
284
285
  const refs = pipe(
285
286
  Ref.make(Chunk.empty<In>()),
286
287
  Effect.zip(Ref.make(false))
@@ -288,8 +289,8 @@ export const collectAllWhileWith = dual<
288
289
  const newChannel = pipe(
289
290
  core.fromEffect(refs),
290
291
  core.flatMap(([leftoversRef, upstreamDoneRef]) => {
291
- const upstreamMarker: Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, unknown> =
292
- core.readWith({
292
+ const upstreamMarker: Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, unknown, unknown> = core
293
+ .readWith({
293
294
  onInput: (input) => pipe(core.write(input), core.flatMap(() => upstreamMarker)),
294
295
  onFailure: core.fail,
295
296
  onDone: (done) => pipe(core.fromEffect(Ref.set(upstreamDoneRef, true)), channel.as(done))
@@ -309,13 +310,13 @@ export const collectAllWhileWith = dual<
309
310
 
310
311
  /** @internal */
311
312
  const collectAllWhileWithLoop = <R, E, In, L extends In, Z, S>(
312
- self: Sink.Sink<R, E, In, L, Z>,
313
+ self: Sink.Sink<Z, In, L, E, R>,
313
314
  leftoversRef: Ref.Ref<Chunk.Chunk<In>>,
314
315
  upstreamDoneRef: Ref.Ref<boolean>,
315
316
  currentResult: S,
316
317
  p: Predicate<Z>,
317
318
  f: (s: S, z: Z) => S
318
- ): Channel.Channel<R, never, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<L>, S> => {
319
+ ): Channel.Channel<Chunk.Chunk<L>, Chunk.Chunk<In>, E, never, S, unknown, R> => {
319
320
  return pipe(
320
321
  toChannel(self),
321
322
  channel.doneCollect,
@@ -345,36 +346,36 @@ const collectAllWhileWithLoop = <R, E, In, L extends In, Z, S>(
345
346
  }
346
347
 
347
348
  /** @internal */
348
- export const collectLeftover = <R, E, In, L, Z>(
349
- self: Sink.Sink<R, E, In, L, Z>
350
- ): Sink.Sink<R, E, In, never, [Z, Chunk.Chunk<L>]> =>
349
+ export const collectLeftover = <A, In, L, E, R>(
350
+ self: Sink.Sink<A, In, L, E, R>
351
+ ): Sink.Sink<[A, Chunk.Chunk<L>], In, never, E, R> =>
351
352
  new SinkImpl(pipe(core.collectElements(toChannel(self)), channel.map(([chunks, z]) => [z, Chunk.flatten(chunks)])))
352
353
 
353
354
  /** @internal */
354
355
  export const mapInput = dual<
355
- <In0, In>(f: (input: In0) => In) => <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In0, L, Z>,
356
- <R, E, L, Z, In0, In>(self: Sink.Sink<R, E, In, L, Z>, f: (input: In0) => In) => Sink.Sink<R, E, In0, L, Z>
356
+ <In0, In>(f: (input: In0) => In) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In0, L, E, R>,
357
+ <A, In, L, E, R, In0>(self: Sink.Sink<A, In, L, E, R>, f: (input: In0) => In) => Sink.Sink<A, In0, L, E, R>
357
358
  >(
358
359
  2,
359
- <R, E, L, Z, In0, In>(self: Sink.Sink<R, E, In, L, Z>, f: (input: In0) => In): Sink.Sink<R, E, In0, L, Z> =>
360
+ <A, In, L, E, R, In0>(self: Sink.Sink<A, In, L, E, R>, f: (input: In0) => In): Sink.Sink<A, In0, L, E, R> =>
360
361
  pipe(self, mapInputChunks(Chunk.map(f)))
361
362
  )
362
363
 
363
364
  /** @internal */
364
365
  export const mapInputEffect = dual<
365
- <In0, R2, E2, In>(
366
- f: (input: In0) => Effect.Effect<R2, E2, In>
367
- ) => <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In0, L, Z>,
368
- <R, E, L, Z, In0, R2, E2, In>(
369
- self: Sink.Sink<R, E, In, L, Z>,
370
- f: (input: In0) => Effect.Effect<R2, E2, In>
371
- ) => Sink.Sink<R2 | R, E2 | E, In0, L, Z>
366
+ <In0, In, E2, R2>(
367
+ f: (input: In0) => Effect.Effect<In, E2, R2>
368
+ ) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In0, L, E2 | E, R2 | R>,
369
+ <A, In, L, E, R, In0, E2, R2>(
370
+ self: Sink.Sink<A, In, L, E, R>,
371
+ f: (input: In0) => Effect.Effect<In, E2, R2>
372
+ ) => Sink.Sink<A, In0, L, E2 | E, R2 | R>
372
373
  >(
373
374
  2,
374
- <R, E, L, Z, In0, R2, E2, In>(
375
- self: Sink.Sink<R, E, In, L, Z>,
376
- f: (input: In0) => Effect.Effect<R2, E2, In>
377
- ): Sink.Sink<R | R2, E | E2, In0, L, Z> =>
375
+ <A, In, L, E, R, In0, E2, R2>(
376
+ self: Sink.Sink<A, In, L, E, R>,
377
+ f: (input: In0) => Effect.Effect<In, E2, R2>
378
+ ): Sink.Sink<A, In0, L, E | E2, R | R2> =>
378
379
  mapInputChunksEffect(
379
380
  self,
380
381
  (chunk) =>
@@ -389,18 +390,18 @@ export const mapInputEffect = dual<
389
390
  export const mapInputChunks = dual<
390
391
  <In0, In>(
391
392
  f: (chunk: Chunk.Chunk<In0>) => Chunk.Chunk<In>
392
- ) => <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In0, L, Z>,
393
- <R, E, L, Z, In0, In>(
394
- self: Sink.Sink<R, E, In, L, Z>,
393
+ ) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In0, L, E, R>,
394
+ <A, In, L, E, R, In0>(
395
+ self: Sink.Sink<A, In, L, E, R>,
395
396
  f: (chunk: Chunk.Chunk<In0>) => Chunk.Chunk<In>
396
- ) => Sink.Sink<R, E, In0, L, Z>
397
+ ) => Sink.Sink<A, In0, L, E, R>
397
398
  >(
398
399
  2,
399
- <R, E, L, Z, In0, In>(
400
- self: Sink.Sink<R, E, In, L, Z>,
400
+ <A, In, L, E, R, In0>(
401
+ self: Sink.Sink<A, In, L, E, R>,
401
402
  f: (chunk: Chunk.Chunk<In0>) => Chunk.Chunk<In>
402
- ): Sink.Sink<R, E, In0, L, Z> => {
403
- const loop: Channel.Channel<R, never, Chunk.Chunk<In0>, unknown, never, Chunk.Chunk<In>, unknown> = core.readWith({
403
+ ): Sink.Sink<A, In0, L, E, R> => {
404
+ const loop: Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In0>, never, never, unknown, unknown, R> = core.readWith({
404
405
  onInput: (chunk) => pipe(core.write(f(chunk)), core.flatMap(() => loop)),
405
406
  onFailure: core.fail,
406
407
  onDone: core.succeed
@@ -411,20 +412,20 @@ export const mapInputChunks = dual<
411
412
 
412
413
  /** @internal */
413
414
  export const mapInputChunksEffect = dual<
414
- <In0, R2, E2, In>(
415
- f: (chunk: Chunk.Chunk<In0>) => Effect.Effect<R2, E2, Chunk.Chunk<In>>
416
- ) => <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In0, L, Z>,
417
- <R, E, L, Z, In0, R2, E2, In>(
418
- self: Sink.Sink<R, E, In, L, Z>,
419
- f: (chunk: Chunk.Chunk<In0>) => Effect.Effect<R2, E2, Chunk.Chunk<In>>
420
- ) => Sink.Sink<R2 | R, E2 | E, In0, L, Z>
415
+ <In0, In, E2, R2>(
416
+ f: (chunk: Chunk.Chunk<In0>) => Effect.Effect<Chunk.Chunk<In>, E2, R2>
417
+ ) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In0, L, E2 | E, R2 | R>,
418
+ <A, In, L, E, R, In0, E2, R2>(
419
+ self: Sink.Sink<A, In, L, E, R>,
420
+ f: (chunk: Chunk.Chunk<In0>) => Effect.Effect<Chunk.Chunk<In>, E2, R2>
421
+ ) => Sink.Sink<A, In0, L, E2 | E, R2 | R>
421
422
  >(
422
423
  2,
423
- <R, E, L, Z, In0, R2, E2, In>(
424
- self: Sink.Sink<R, E, In, L, Z>,
425
- f: (chunk: Chunk.Chunk<In0>) => Effect.Effect<R2, E2, Chunk.Chunk<In>>
426
- ): Sink.Sink<R | R2, E | E2, In0, L, Z> => {
427
- const loop: Channel.Channel<R | R2, never, Chunk.Chunk<In0>, unknown, E2, Chunk.Chunk<In>, unknown> = core
424
+ <A, In, L, E, R, In0, E2, R2>(
425
+ self: Sink.Sink<A, In, L, E, R>,
426
+ f: (chunk: Chunk.Chunk<In0>) => Effect.Effect<Chunk.Chunk<In>, E2, R2>
427
+ ): Sink.Sink<A, In0, L, E | E2, R | R2> => {
428
+ const loop: Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In0>, E2, never, unknown, unknown, R | R2> = core
428
429
  .readWith({
429
430
  onInput: (chunk) => pipe(core.fromEffect(f(chunk)), core.flatMap(core.write), core.flatMap(() => loop)),
430
431
  onFailure: core.fail,
@@ -435,66 +436,60 @@ export const mapInputChunksEffect = dual<
435
436
  )
436
437
 
437
438
  /** @internal */
438
- export const die = (defect: unknown): Sink.Sink<never, never, unknown, never, never> => failCause(Cause.die(defect))
439
+ export const die = (defect: unknown): Sink.Sink<never, unknown> => failCause(Cause.die(defect))
439
440
 
440
441
  /** @internal */
441
- export const dieMessage = (message: string): Sink.Sink<never, never, unknown, never, never> =>
442
+ export const dieMessage = (message: string): Sink.Sink<never, unknown> =>
442
443
  failCause(Cause.die(new Cause.RuntimeException(message)))
443
444
 
444
445
  /** @internal */
445
- export const dieSync = (evaluate: LazyArg<unknown>): Sink.Sink<never, never, unknown, never, never> =>
446
+ export const dieSync = (evaluate: LazyArg<unknown>): Sink.Sink<never, unknown> =>
446
447
  failCauseSync(() => Cause.die(evaluate()))
447
448
 
448
449
  /** @internal */
449
450
  export const dimap = dual<
450
- <In0, In, Z, Z2>(
451
+ <In0, In, A, A2>(
451
452
  options: {
452
453
  readonly onInput: (input: In0) => In
453
- readonly onDone: (z: Z) => Z2
454
+ readonly onDone: (a: A) => A2
454
455
  }
455
- ) => <R, E, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In0, L, Z2>,
456
- <R, E, L, In0, In, Z, Z2>(
457
- self: Sink.Sink<R, E, In, L, Z>,
456
+ ) => <L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In0, L, E, R>,
457
+ <A, In, L, E, R, In0, A2>(
458
+ self: Sink.Sink<A, In, L, E, R>,
458
459
  options: {
459
460
  readonly onInput: (input: In0) => In
460
- readonly onDone: (z: Z) => Z2
461
+ readonly onDone: (a: A) => A2
461
462
  }
462
- ) => Sink.Sink<R, E, In0, L, Z2>
463
+ ) => Sink.Sink<A2, In0, L, E, R>
463
464
  >(
464
465
  2,
465
- <R, E, L, In0, In, Z, Z2>(
466
- self: Sink.Sink<R, E, In, L, Z>,
466
+ <A, In, L, E, R, In0, A2>(
467
+ self: Sink.Sink<A, In, L, E, R>,
467
468
  options: {
468
469
  readonly onInput: (input: In0) => In
469
- readonly onDone: (z: Z) => Z2
470
+ readonly onDone: (a: A) => A2
470
471
  }
471
- ): Sink.Sink<R, E, In0, L, Z2> => map(mapInput(self, options.onInput), options.onDone)
472
+ ): Sink.Sink<A2, In0, L, E, R> => map(mapInput(self, options.onInput), options.onDone)
472
473
  )
473
474
 
474
475
  /** @internal */
475
476
  export const dimapEffect = dual<
476
- <In0, R2, E2, In, Z, R3, E3, Z2>(
477
+ <In0, R2, E2, In, A, R3, E3, A2>(
477
478
  options: {
478
- readonly onInput: (input: In0) => Effect.Effect<R2, E2, In>
479
- readonly onDone: (z: Z) => Effect.Effect<R3, E3, Z2>
479
+ readonly onInput: (input: In0) => Effect.Effect<In, E2, R2>
480
+ readonly onDone: (a: A) => Effect.Effect<A2, E3, R3>
480
481
  }
481
- ) => <R, E, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R3 | R, E2 | E3 | E, In0, L, Z2>,
482
- <R, E, L, In0, R2, E2, In, Z, R3, E3, Z2>(
483
- self: Sink.Sink<R, E, In, L, Z>,
482
+ ) => <R, E, L>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In0, L, E2 | E3 | E, R2 | R3 | R>,
483
+ <A, In, L, E, R, In0, E2, R2, A2, E3, R3>(
484
+ self: Sink.Sink<A, In, L, E, R>,
484
485
  options: {
485
- readonly onInput: (input: In0) => Effect.Effect<R2, E2, In>
486
- readonly onDone: (z: Z) => Effect.Effect<R3, E3, Z2>
486
+ readonly onInput: (input: In0) => Effect.Effect<In, E2, R2>
487
+ readonly onDone: (a: A) => Effect.Effect<A2, E3, R3>
487
488
  }
488
- ) => Sink.Sink<R2 | R3 | R, E2 | E3 | E, In0, L, Z2>
489
+ ) => Sink.Sink<A2, In0, L, E2 | E3 | E, R2 | R3 | R>
489
490
  >(
490
491
  2,
491
- <R, E, L, In0, R2, E2, In, Z, R3, E3, Z2>(
492
- self: Sink.Sink<R, E, In, L, Z>,
493
- options: {
494
- readonly onInput: (input: In0) => Effect.Effect<R2, E2, In>
495
- readonly onDone: (z: Z) => Effect.Effect<R3, E3, Z2>
496
- }
497
- ): Sink.Sink<R | R2 | R3, E | E2 | E3, In0, L, Z2> =>
492
+ (self, options) =>
498
493
  mapEffect(
499
494
  mapInputEffect(self, options.onInput),
500
495
  options.onDone
@@ -503,28 +498,22 @@ export const dimapEffect = dual<
503
498
 
504
499
  /** @internal */
505
500
  export const dimapChunks = dual<
506
- <In0, In, Z, Z2>(
501
+ <In0, In, A, A2>(
507
502
  options: {
508
503
  readonly onInput: (chunk: Chunk.Chunk<In0>) => Chunk.Chunk<In>
509
- readonly onDone: (z: Z) => Z2
504
+ readonly onDone: (a: A) => A2
510
505
  }
511
- ) => <R, E, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In0, L, Z2>,
512
- <R, E, L, In0, In, Z, Z2>(
513
- self: Sink.Sink<R, E, In, L, Z>,
506
+ ) => <L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In0, L, E, R>,
507
+ <A, In, L, E, R, In0, A2>(
508
+ self: Sink.Sink<A, In, L, E, R>,
514
509
  options: {
515
510
  readonly onInput: (chunk: Chunk.Chunk<In0>) => Chunk.Chunk<In>
516
- readonly onDone: (z: Z) => Z2
511
+ readonly onDone: (a: A) => A2
517
512
  }
518
- ) => Sink.Sink<R, E, In0, L, Z2>
513
+ ) => Sink.Sink<A2, In0, L, E, R>
519
514
  >(
520
515
  2,
521
- <R, E, L, In0, In, Z, Z2>(
522
- self: Sink.Sink<R, E, In, L, Z>,
523
- options: {
524
- readonly onInput: (chunk: Chunk.Chunk<In0>) => Chunk.Chunk<In>
525
- readonly onDone: (z: Z) => Z2
526
- }
527
- ): Sink.Sink<R, E, In0, L, Z2> =>
516
+ (self, options) =>
528
517
  map(
529
518
  mapInputChunks(self, options.onInput),
530
519
  options.onDone
@@ -533,44 +522,36 @@ export const dimapChunks = dual<
533
522
 
534
523
  /** @internal */
535
524
  export const dimapChunksEffect = dual<
536
- <In0, R2, E2, In, Z, R3, E3, Z2>(
525
+ <In0, In, E2, R2, A, A2, E3, R3>(
537
526
  options: {
538
- readonly onInput: (chunk: Chunk.Chunk<In0>) => Effect.Effect<R2, E2, Chunk.Chunk<In>>
539
- readonly onDone: (z: Z) => Effect.Effect<R3, E3, Z2>
527
+ readonly onInput: (chunk: Chunk.Chunk<In0>) => Effect.Effect<Chunk.Chunk<In>, E2, R2>
528
+ readonly onDone: (a: A) => Effect.Effect<A2, E3, R3>
540
529
  }
541
- ) => <R, E, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R3 | R, E2 | E3 | E, In0, L, Z2>,
542
- <R, E, L, In0, R2, E2, In, Z, R3, E3, Z2>(
543
- self: Sink.Sink<R, E, In, L, Z>,
530
+ ) => <R, E, L>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In0, L, E2 | E3 | E, R2 | R3 | R>,
531
+ <A, In, L, E, R, In0, E2, R2, A2, E3, R3>(
532
+ self: Sink.Sink<A, In, L, E, R>,
544
533
  options: {
545
- readonly onInput: (chunk: Chunk.Chunk<In0>) => Effect.Effect<R2, E2, Chunk.Chunk<In>>
546
- readonly onDone: (z: Z) => Effect.Effect<R3, E3, Z2>
534
+ readonly onInput: (chunk: Chunk.Chunk<In0>) => Effect.Effect<Chunk.Chunk<In>, E2, R2>
535
+ readonly onDone: (a: A) => Effect.Effect<A2, E3, R3>
547
536
  }
548
- ) => Sink.Sink<R2 | R3 | R, E2 | E3 | E, In0, L, Z2>
537
+ ) => Sink.Sink<A2, In0, L, E2 | E3 | E, R2 | R3 | R>
549
538
  >(
550
539
  2,
551
- <R, E, L, In0, R2, E2, In, Z, R3, E3, Z2>(
552
- self: Sink.Sink<R, E, In, L, Z>,
553
- options: {
554
- readonly onInput: (chunk: Chunk.Chunk<In0>) => Effect.Effect<R2, E2, Chunk.Chunk<In>>
555
- readonly onDone: (z: Z) => Effect.Effect<R3, E3, Z2>
556
- }
557
- ): Sink.Sink<R | R2 | R3, E | E2 | E3, In0, L, Z2> =>
558
- mapEffect(mapInputChunksEffect(self, options.onInput), options.onDone)
540
+ (self, options) => mapEffect(mapInputChunksEffect(self, options.onInput), options.onDone)
559
541
  )
560
542
 
561
543
  /** @internal */
562
- export const drain: Sink.Sink<never, never, unknown, never, void> = new SinkImpl(
563
- channel.drain(channel.identityChannel<never, unknown, unknown>())
544
+ export const drain: Sink.Sink<void, unknown> = new SinkImpl(
545
+ channel.drain(channel.identityChannel())
564
546
  )
565
547
 
566
548
  /** @internal */
567
- export const drop = <In>(n: number): Sink.Sink<never, never, In, In, unknown> =>
568
- suspend(() => new SinkImpl(dropLoop(n)))
549
+ export const drop = <In>(n: number): Sink.Sink<unknown, In, In> => suspend(() => new SinkImpl(dropLoop(n)))
569
550
 
570
551
  /** @internal */
571
552
  const dropLoop = <In>(
572
553
  n: number
573
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, unknown> =>
554
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, unknown, unknown> =>
574
555
  core.readWith({
575
556
  onInput: (input: Chunk.Chunk<In>) => {
576
557
  const dropped = pipe(input, Chunk.drop(n))
@@ -581,7 +562,7 @@ const dropLoop = <In>(
581
562
  }
582
563
  return pipe(
583
564
  core.write(dropped),
584
- channel.zipRight(channel.identityChannel<never, Chunk.Chunk<In>, unknown>())
565
+ channel.zipRight(channel.identityChannel<Chunk.Chunk<In>, never, unknown>())
585
566
  )
586
567
  },
587
568
  onFailure: core.fail,
@@ -589,20 +570,20 @@ const dropLoop = <In>(
589
570
  })
590
571
 
591
572
  /** @internal */
592
- export const dropUntil = <In>(predicate: Predicate<In>): Sink.Sink<never, never, In, In, unknown> =>
573
+ export const dropUntil = <In>(predicate: Predicate<In>): Sink.Sink<unknown, In, In> =>
593
574
  new SinkImpl(
594
575
  pipe(toChannel(dropWhile((input: In) => !predicate(input))), channel.pipeToOrFail(toChannel(drop<In>(1))))
595
576
  )
596
577
 
597
578
  /** @internal */
598
- export const dropUntilEffect = <In, R, E>(
599
- predicate: (input: In) => Effect.Effect<R, E, boolean>
600
- ): Sink.Sink<R, E, In, In, unknown> => suspend(() => new SinkImpl(dropUntilEffectReader(predicate)))
579
+ export const dropUntilEffect = <In, E, R>(
580
+ predicate: (input: In) => Effect.Effect<boolean, E, R>
581
+ ): Sink.Sink<unknown, In, In, E, R> => suspend(() => new SinkImpl(dropUntilEffectReader(predicate)))
601
582
 
602
583
  /** @internal */
603
584
  const dropUntilEffectReader = <In, R, E>(
604
- predicate: (input: In) => Effect.Effect<R, E, boolean>
605
- ): Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<In>, unknown> =>
585
+ predicate: (input: In) => Effect.Effect<boolean, E, R>
586
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E, E, unknown, unknown, R> =>
606
587
  core.readWith({
607
588
  onInput: (input: Chunk.Chunk<In>) =>
608
589
  pipe(
@@ -614,7 +595,7 @@ const dropUntilEffectReader = <In, R, E>(
614
595
  dropUntilEffectReader(predicate) :
615
596
  pipe(
616
597
  core.write(Chunk.unsafeFromArray(leftover)),
617
- channel.zipRight(channel.identityChannel<E, Chunk.Chunk<In>, unknown>())
598
+ channel.zipRight(channel.identityChannel<Chunk.Chunk<In>, E, unknown>())
618
599
  )
619
600
  }),
620
601
  channel.unwrap
@@ -624,34 +605,34 @@ const dropUntilEffectReader = <In, R, E>(
624
605
  })
625
606
 
626
607
  /** @internal */
627
- export const dropWhile = <In>(predicate: Predicate<In>): Sink.Sink<never, never, In, In, unknown> =>
608
+ export const dropWhile = <In>(predicate: Predicate<In>): Sink.Sink<unknown, In, In> =>
628
609
  new SinkImpl(dropWhileReader(predicate))
629
610
 
630
611
  /** @internal */
631
612
  const dropWhileReader = <In>(
632
613
  predicate: Predicate<In>
633
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, unknown> =>
614
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, unknown, unknown> =>
634
615
  core.readWith({
635
616
  onInput: (input: Chunk.Chunk<In>) => {
636
617
  const out = pipe(input, Chunk.dropWhile(predicate))
637
618
  if (Chunk.isEmpty(out)) {
638
619
  return dropWhileReader(predicate)
639
620
  }
640
- return pipe(core.write(out), channel.zipRight(channel.identityChannel<never, Chunk.Chunk<In>, unknown>()))
621
+ return pipe(core.write(out), channel.zipRight(channel.identityChannel<Chunk.Chunk<In>, never, unknown>()))
641
622
  },
642
623
  onFailure: core.fail,
643
624
  onDone: core.succeedNow
644
625
  })
645
626
 
646
627
  /** @internal */
647
- export const dropWhileEffect = <In, R, E>(
648
- predicate: (input: In) => Effect.Effect<R, E, boolean>
649
- ): Sink.Sink<R, E, In, In, unknown> => suspend(() => new SinkImpl(dropWhileEffectReader(predicate)))
628
+ export const dropWhileEffect = <In, E, R>(
629
+ predicate: (input: In) => Effect.Effect<boolean, E, R>
630
+ ): Sink.Sink<unknown, In, In, E, R> => suspend(() => new SinkImpl(dropWhileEffectReader(predicate)))
650
631
 
651
632
  /** @internal */
652
633
  const dropWhileEffectReader = <In, R, E>(
653
- predicate: (input: In) => Effect.Effect<R, E, boolean>
654
- ): Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<In>, unknown> =>
634
+ predicate: (input: In) => Effect.Effect<boolean, E, R>
635
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E, E, unknown, unknown, R> =>
655
636
  core.readWith({
656
637
  onInput: (input: Chunk.Chunk<In>) =>
657
638
  pipe(
@@ -663,7 +644,7 @@ const dropWhileEffectReader = <In, R, E>(
663
644
  dropWhileEffectReader(predicate) :
664
645
  pipe(
665
646
  core.write(Chunk.unsafeFromArray(leftover)),
666
- channel.zipRight(channel.identityChannel<E, Chunk.Chunk<In>, unknown>())
647
+ channel.zipRight(channel.identityChannel<Chunk.Chunk<In>, E, unknown>())
667
648
  )
668
649
  }),
669
650
  channel.unwrap
@@ -674,102 +655,93 @@ const dropWhileEffectReader = <In, R, E>(
674
655
 
675
656
  /** @internal */
676
657
  export const ensuring = dual<
677
- <R2, _>(
678
- finalizer: Effect.Effect<R2, never, _>
679
- ) => <R, E, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E, In, L, Z>,
680
- <R, E, In, L, Z, R2, _>(
681
- self: Sink.Sink<R, E, In, L, Z>,
682
- finalizer: Effect.Effect<R2, never, _>
683
- ) => Sink.Sink<R2 | R, E, In, L, Z>
658
+ <_, R2>(
659
+ finalizer: Effect.Effect<_, never, R2>
660
+ ) => <A, In, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, L, E, R2 | R>,
661
+ <A, In, L, E, R, _, R2>(
662
+ self: Sink.Sink<A, In, L, E, R>,
663
+ finalizer: Effect.Effect<_, never, R2>
664
+ ) => Sink.Sink<A, In, L, E, R2 | R>
684
665
  >(
685
666
  2,
686
- <R, E, In, L, Z, R2, _>(
687
- self: Sink.Sink<R, E, In, L, Z>,
688
- finalizer: Effect.Effect<R2, never, _>
689
- ): Sink.Sink<R | R2, E, In, L, Z> => new SinkImpl(pipe(self, toChannel, channel.ensuring(finalizer)))
667
+ (self, finalizer) => new SinkImpl(pipe(self, toChannel, channel.ensuring(finalizer)))
690
668
  )
691
669
 
692
670
  /** @internal */
693
671
  export const ensuringWith = dual<
694
- <E, Z, R2, _>(
695
- finalizer: (exit: Exit.Exit<E, Z>) => Effect.Effect<R2, never, _>
696
- ) => <R, In, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E, In, L, Z>,
697
- <R, In, L, E, Z, R2, _>(
698
- self: Sink.Sink<R, E, In, L, Z>,
699
- finalizer: (exit: Exit.Exit<E, Z>) => Effect.Effect<R2, never, _>
700
- ) => Sink.Sink<R2 | R, E, In, L, Z>
672
+ <A, E, _, R2>(
673
+ finalizer: (exit: Exit.Exit<A, E>) => Effect.Effect<_, never, R2>
674
+ ) => <In, L, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, L, E, R2 | R>,
675
+ <A, In, L, E, R, _, R2>(
676
+ self: Sink.Sink<A, In, L, E, R>,
677
+ finalizer: (exit: Exit.Exit<A, E>) => Effect.Effect<_, never, R2>
678
+ ) => Sink.Sink<A, In, L, E, R2 | R>
701
679
  >(
702
680
  2,
703
- <R, In, L, E, Z, R2, _>(
704
- self: Sink.Sink<R, E, In, L, Z>,
705
- finalizer: (exit: Exit.Exit<E, Z>) => Effect.Effect<R2, never, _>
706
- ): Sink.Sink<R | R2, E, In, L, Z> => new SinkImpl(pipe(self, toChannel, core.ensuringWith(finalizer)))
681
+ (self, finalizer) => new SinkImpl(pipe(self, toChannel, core.ensuringWith(finalizer)))
707
682
  )
708
683
 
709
684
  /** @internal */
710
- export const context = <R>(): Sink.Sink<R, never, unknown, never, Context.Context<R>> => fromEffect(Effect.context<R>())
685
+ export const context = <R>(): Sink.Sink<Context.Context<R>, unknown, never, never, R> => fromEffect(Effect.context<R>())
711
686
 
712
687
  /** @internal */
713
688
  export const contextWith = <R, Z>(
714
689
  f: (context: Context.Context<R>) => Z
715
- ): Sink.Sink<R, never, unknown, never, Z> => pipe(context<R>(), map(f))
690
+ ): Sink.Sink<Z, unknown, never, never, R> => pipe(context<R>(), map(f))
716
691
 
717
692
  /** @internal */
718
- export const contextWithEffect = <R0, R, E, Z>(
719
- f: (context: Context.Context<R0>) => Effect.Effect<R, E, Z>
720
- ): Sink.Sink<R0 | R, E, unknown, never, Z> => pipe(context<R0>(), mapEffect(f))
693
+ export const contextWithEffect = <R0, A, E, R>(
694
+ f: (context: Context.Context<R0>) => Effect.Effect<A, E, R>
695
+ ): Sink.Sink<A, unknown, never, E, R0 | R> => pipe(context<R0>(), mapEffect(f))
721
696
 
722
697
  /** @internal */
723
- export const contextWithSink = <R0, R, E, In, L, Z>(
724
- f: (context: Context.Context<R0>) => Sink.Sink<R, E, In, L, Z>
725
- ): Sink.Sink<R0 | R, E, In, L, Z> =>
698
+ export const contextWithSink = <R0, A, In, L, E, R>(
699
+ f: (context: Context.Context<R0>) => Sink.Sink<A, In, L, E, R>
700
+ ): Sink.Sink<A, In, L, E, R0 | R> =>
726
701
  new SinkImpl(channel.unwrap(pipe(Effect.contextWith((context) => toChannel(f(context))))))
727
702
 
728
703
  /** @internal */
729
- export const every = <In>(predicate: Predicate<In>): Sink.Sink<never, never, In, In, boolean> =>
704
+ export const every = <In>(predicate: Predicate<In>): Sink.Sink<boolean, In, In> =>
730
705
  fold(true, identity, (acc, input) => acc && predicate(input))
731
706
 
732
707
  /** @internal */
733
- export const fail = <E>(e: E): Sink.Sink<never, E, unknown, never, never> => new SinkImpl(core.fail(e))
708
+ export const fail = <E>(e: E): Sink.Sink<never, unknown, never, E> => new SinkImpl(core.fail(e))
734
709
 
735
710
  /** @internal */
736
- export const failSync = <E>(evaluate: LazyArg<E>): Sink.Sink<never, E, unknown, never, never> =>
711
+ export const failSync = <E>(evaluate: LazyArg<E>): Sink.Sink<never, unknown, never, E> =>
737
712
  new SinkImpl(core.failSync(evaluate))
738
713
 
739
714
  /** @internal */
740
- export const failCause = <E>(cause: Cause.Cause<E>): Sink.Sink<never, E, unknown, never, never> =>
715
+ export const failCause = <E>(cause: Cause.Cause<E>): Sink.Sink<never, unknown, never, E> =>
741
716
  new SinkImpl(core.failCause(cause))
742
717
 
743
718
  /** @internal */
744
- export const failCauseSync = <E>(evaluate: LazyArg<Cause.Cause<E>>): Sink.Sink<never, E, unknown, never, never> =>
719
+ export const failCauseSync = <E>(evaluate: LazyArg<Cause.Cause<E>>): Sink.Sink<never, unknown, never, E> =>
745
720
  new SinkImpl(core.failCauseSync(evaluate))
746
721
 
747
722
  /** @internal */
748
723
  export const filterInput: {
749
724
  <In, In1 extends In, In2 extends In1>(
750
725
  f: Refinement<In1, In2>
751
- ): <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In2, L, Z>
752
- <In, In1 extends In>(f: Predicate<In1>): <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In1, L, Z>
726
+ ): <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In2, L, E, R>
727
+ <In, In1 extends In>(f: Predicate<In1>): <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In1, L, E, R>
753
728
  } = <In, In1 extends In>(f: Predicate<In1>) => {
754
- return <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>): Sink.Sink<R, E, In1, L, Z> =>
729
+ return <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>): Sink.Sink<A, In1, L, E, R> =>
755
730
  pipe(self, mapInputChunks(Chunk.filter(f)))
756
731
  }
757
732
 
758
733
  /** @internal */
759
734
  export const filterInputEffect = dual<
760
- <R2, E2, In, In1 extends In>(
761
- f: (input: In1) => Effect.Effect<R2, E2, boolean>
762
- ) => <R, E, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In1, L, Z>,
763
- <R, E, L, Z, R2, E2, In, In1 extends In>(
764
- self: Sink.Sink<R, E, In, L, Z>,
765
- f: (input: In1) => Effect.Effect<R2, E2, boolean>
766
- ) => Sink.Sink<R2 | R, E2 | E, In1, L, Z>
735
+ <In, In1 extends In, E2, R2>(
736
+ f: (input: In1) => Effect.Effect<boolean, E2, R2>
737
+ ) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In1, L, E2 | E, R2 | R>,
738
+ <A, In, L, E, R, In1 extends In, E2, R2>(
739
+ self: Sink.Sink<A, In, L, E, R>,
740
+ f: (input: In1) => Effect.Effect<boolean, E2, R2>
741
+ ) => Sink.Sink<A, In1, L, E2 | E, R2 | R>
767
742
  >(
768
743
  2,
769
- <R, E, L, Z, R2, E2, In, In1 extends In>(
770
- self: Sink.Sink<R, E, In, L, Z>,
771
- f: (input: In1) => Effect.Effect<R2, E2, boolean>
772
- ): Sink.Sink<R | R2, E | E2, In1, L, Z> =>
744
+ (self, f) =>
773
745
  mapInputChunksEffect(
774
746
  self,
775
747
  (chunk) => Effect.map(Effect.filter(chunk, f), Chunk.unsafeFromArray)
@@ -778,32 +750,32 @@ export const filterInputEffect = dual<
778
750
 
779
751
  /** @internal */
780
752
  export const findEffect = dual<
781
- <Z, R2, E2>(
782
- f: (z: Z) => Effect.Effect<R2, E2, boolean>
783
- ) => <R, E, In, L extends In>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In, L, Option.Option<Z>>,
784
- <R, E, In, L extends In, Z, R2, E2>(
785
- self: Sink.Sink<R, E, In, L, Z>,
786
- f: (z: Z) => Effect.Effect<R2, E2, boolean>
787
- ) => Sink.Sink<R2 | R, E2 | E, In, L, Option.Option<Z>>
753
+ <A, E2, R2>(
754
+ f: (a: A) => Effect.Effect<boolean, E2, R2>
755
+ ) => <In, L extends In, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<Option.Option<A>, In, L, E2 | E, R2 | R>,
756
+ <A, In, L extends In, E, R, E2, R2>(
757
+ self: Sink.Sink<A, In, L, E, R>,
758
+ f: (a: A) => Effect.Effect<boolean, E2, R2>
759
+ ) => Sink.Sink<Option.Option<A>, In, L, E2 | E, R2 | R>
788
760
  >(
789
761
  2,
790
- <R, E, In, L extends In, Z, R2, E2>(
791
- self: Sink.Sink<R, E, In, L, Z>,
792
- f: (z: Z) => Effect.Effect<R2, E2, boolean>
793
- ): Sink.Sink<R | R2, E | E2, In, L, Option.Option<Z>> => {
762
+ <A, In, L extends In, E, R, E2, R2>(
763
+ self: Sink.Sink<A, In, L, E, R>,
764
+ f: (a: A) => Effect.Effect<boolean, E2, R2>
765
+ ): Sink.Sink<Option.Option<A>, In, L, E2 | E, R2 | R> => {
794
766
  const newChannel = pipe(
795
767
  core.fromEffect(pipe(
796
768
  Ref.make(Chunk.empty<In>()),
797
769
  Effect.zip(Ref.make(false))
798
770
  )),
799
771
  core.flatMap(([leftoversRef, upstreamDoneRef]) => {
800
- const upstreamMarker: Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, unknown> =
801
- core.readWith({
772
+ const upstreamMarker: Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, unknown, unknown> = core
773
+ .readWith({
802
774
  onInput: (input) => pipe(core.write(input), core.flatMap(() => upstreamMarker)),
803
775
  onFailure: core.fail,
804
776
  onDone: (done) => pipe(core.fromEffect(Ref.set(upstreamDoneRef, true)), channel.as(done))
805
777
  })
806
- const loop: Channel.Channel<R | R2, never, Chunk.Chunk<In>, unknown, E | E2, Chunk.Chunk<L>, Option.Option<Z>> =
778
+ const loop: Channel.Channel<Chunk.Chunk<L>, Chunk.Chunk<In>, E | E2, never, Option.Option<A>, unknown, R | R2> =
807
779
  channel.foldChannel(core.collectElements(toChannel(self)), {
808
780
  onFailure: core.fail,
809
781
  onSuccess: ([leftovers, doneValue]) =>
@@ -841,15 +813,15 @@ export const findEffect = dual<
841
813
  export const fold = <S, In>(
842
814
  s: S,
843
815
  contFn: Predicate<S>,
844
- f: (z: S, input: In) => S
845
- ): Sink.Sink<never, never, In, In, S> => suspend(() => new SinkImpl(foldReader(s, contFn, f)))
816
+ f: (s: S, input: In) => S
817
+ ): Sink.Sink<S, In, In> => suspend(() => new SinkImpl(foldReader(s, contFn, f)))
846
818
 
847
819
  /** @internal */
848
820
  const foldReader = <S, In>(
849
821
  s: S,
850
822
  contFn: Predicate<S>,
851
823
  f: (z: S, input: In) => S
852
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, S> => {
824
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, S, unknown> => {
853
825
  if (!contFn(s)) {
854
826
  return core.succeedNow(s)
855
827
  }
@@ -887,36 +859,36 @@ const foldChunkSplit = <S, In>(
887
859
 
888
860
  /** @internal */
889
861
  export const foldSink = dual<
890
- <R1, R2, E, E1, E2, In, In1 extends In, In2 extends In, L, L1, L2, Z, Z1, Z2>(
862
+ <E, A1, In, In1 extends In, L1, E1, R1, A, A2, In2 extends In, L2, E2, R2>(
891
863
  options: {
892
- readonly onFailure: (err: E) => Sink.Sink<R1, E1, In1, L1, Z1>
893
- readonly onSuccess: (z: Z) => Sink.Sink<R2, E2, In2, L2, Z2>
864
+ readonly onFailure: (err: E) => Sink.Sink<A1, In1, L1, E1, R1>
865
+ readonly onSuccess: (a: A) => Sink.Sink<A2, In2, L2, E2, R2>
894
866
  }
895
- ) => <R>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R1 | R2 | R, E1 | E2, In1 & In2, L1 | L2, Z1 | Z2>,
896
- <R, R1, R2, E, E1, E2, In, In1 extends In, In2 extends In, L, L1, L2, Z, Z1, Z2>(
897
- self: Sink.Sink<R, E, In, L, Z>,
867
+ ) => <L, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A1 | A2, In1 & In2, L1 | L2, E1 | E2, R1 | R2 | R>,
868
+ <A, In, L, E, R, A1, In1 extends In, L1, E1, R1, A2, In2 extends In, L2, E2, R2>(
869
+ self: Sink.Sink<A, In, L, E, R>,
898
870
  options: {
899
- readonly onFailure: (err: E) => Sink.Sink<R1, E1, In1, L1, Z1>
900
- readonly onSuccess: (z: Z) => Sink.Sink<R2, E2, In2, L2, Z2>
871
+ readonly onFailure: (err: E) => Sink.Sink<A1, In1, L1, E1, R1>
872
+ readonly onSuccess: (a: A) => Sink.Sink<A2, In2, L2, E2, R2>
901
873
  }
902
- ) => Sink.Sink<R1 | R2 | R, E1 | E2, In1 & In2, L1 | L2, Z1 | Z2>
874
+ ) => Sink.Sink<A1 | A2, In1 & In2, L1 | L2, E1 | E2, R1 | R2 | R>
903
875
  >(
904
876
  2,
905
- <R, R1, R2, E, E1, E2, In, In1 extends In, In2 extends In, L, L1, L2, Z, Z1, Z2>(
906
- self: Sink.Sink<R, E, In, L, Z>,
877
+ <A, In, L, E, R, A1, In1 extends In, L1, E1, R1, A2, In2 extends In, L2, E2, R2>(
878
+ self: Sink.Sink<A, In, L, E, R>,
907
879
  options: {
908
- readonly onFailure: (err: E) => Sink.Sink<R1, E1, In1, L1, Z1>
909
- readonly onSuccess: (z: Z) => Sink.Sink<R2, E2, In2, L2, Z2>
880
+ readonly onFailure: (err: E) => Sink.Sink<A1, In1, L1, E1, R1>
881
+ readonly onSuccess: (z: A) => Sink.Sink<A2, In2, L2, E2, R2>
910
882
  }
911
- ): Sink.Sink<R | R1 | R2, E1 | E2, In1 & In2, L1 | L2, Z1 | Z2> => {
883
+ ): Sink.Sink<A1 | A2, In1 & In2, L1 | L2, E1 | E2, R | R1 | R2> => {
912
884
  const newChannel: Channel.Channel<
913
- R | R1 | R2,
914
- never,
885
+ Chunk.Chunk<L1 | L2>,
915
886
  Chunk.Chunk<In1 & In2>,
916
- unknown,
917
887
  E1 | E2,
918
- Chunk.Chunk<L1 | L2>,
919
- Z1 | Z2
888
+ never,
889
+ A1 | A2,
890
+ unknown,
891
+ R | R1 | R2
920
892
  > = pipe(
921
893
  toChannel(self),
922
894
  core.collectElements,
@@ -937,7 +909,7 @@ export const foldSink = dual<
937
909
  // L <: In1 and therefore Chunk[L] can be safely cast to Chunk[In1].
938
910
  core.flatMap((chunk) => channel.writeChunk(chunk as Chunk.Chunk<Chunk.Chunk<In1 & In2>>))
939
911
  )
940
- const passthrough = channel.identityChannel<never, Chunk.Chunk<In1 & In2>, unknown>()
912
+ const passthrough = channel.identityChannel<Chunk.Chunk<In1 & In2>, never, unknown>()
941
913
  const continuationSink = pipe(
942
914
  refReader,
943
915
  channel.zipRight(passthrough),
@@ -965,14 +937,14 @@ export const foldChunks = <S, In>(
965
937
  s: S,
966
938
  contFn: Predicate<S>,
967
939
  f: (s: S, chunk: Chunk.Chunk<In>) => S
968
- ): Sink.Sink<never, never, In, never, S> => suspend(() => new SinkImpl(foldChunksReader(s, contFn, f)))
940
+ ): Sink.Sink<S, In> => suspend(() => new SinkImpl(foldChunksReader(s, contFn, f)))
969
941
 
970
942
  /** @internal */
971
943
  const foldChunksReader = <S, In>(
972
944
  s: S,
973
945
  contFn: Predicate<S>,
974
946
  f: (s: S, chunk: Chunk.Chunk<In>) => S
975
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, never, S> => {
947
+ ): Channel.Channel<never, Chunk.Chunk<In>, never, never, S, unknown> => {
976
948
  if (!contFn(s)) {
977
949
  return core.succeedNow(s)
978
950
  }
@@ -984,18 +956,18 @@ const foldChunksReader = <S, In>(
984
956
  }
985
957
 
986
958
  /** @internal */
987
- export const foldChunksEffect = <S, R, E, In>(
959
+ export const foldChunksEffect = <S, In, E, R>(
988
960
  s: S,
989
961
  contFn: Predicate<S>,
990
- f: (s: S, chunk: Chunk.Chunk<In>) => Effect.Effect<R, E, S>
991
- ): Sink.Sink<R, E, In, In, S> => suspend(() => new SinkImpl(foldChunksEffectReader(s, contFn, f)))
962
+ f: (s: S, chunk: Chunk.Chunk<In>) => Effect.Effect<S, E, R>
963
+ ): Sink.Sink<S, In, In, E, R> => suspend(() => new SinkImpl(foldChunksEffectReader(s, contFn, f)))
992
964
 
993
965
  /** @internal */
994
966
  const foldChunksEffectReader = <S, R, E, In>(
995
967
  s: S,
996
968
  contFn: Predicate<S>,
997
- f: (s: S, chunk: Chunk.Chunk<In>) => Effect.Effect<R, E, S>
998
- ): Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, never, S> => {
969
+ f: (s: S, chunk: Chunk.Chunk<In>) => Effect.Effect<S, E, R>
970
+ ): Channel.Channel<never, Chunk.Chunk<In>, E, E, S, unknown, R> => {
999
971
  if (!contFn(s)) {
1000
972
  return core.succeedNow(s)
1001
973
  }
@@ -1011,18 +983,18 @@ const foldChunksEffectReader = <S, R, E, In>(
1011
983
  }
1012
984
 
1013
985
  /** @internal */
1014
- export const foldEffect = <S, R, E, In>(
986
+ export const foldEffect = <S, In, E, R>(
1015
987
  s: S,
1016
988
  contFn: Predicate<S>,
1017
- f: (s: S, input: In) => Effect.Effect<R, E, S>
1018
- ): Sink.Sink<R, E, In, In, S> => suspend(() => new SinkImpl(foldEffectReader(s, contFn, f)))
989
+ f: (s: S, input: In) => Effect.Effect<S, E, R>
990
+ ): Sink.Sink<S, In, In, E, R> => suspend(() => new SinkImpl(foldEffectReader(s, contFn, f)))
1019
991
 
1020
992
  /** @internal */
1021
993
  const foldEffectReader = <S, In, R, E>(
1022
994
  s: S,
1023
995
  contFn: Predicate<S>,
1024
- f: (s: S, input: In) => Effect.Effect<R, E, S>
1025
- ): Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<In>, S> => {
996
+ f: (s: S, input: In) => Effect.Effect<S, E, R>
997
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E, E, S, unknown, R> => {
1026
998
  if (!contFn(s)) {
1027
999
  return core.succeedNow(s)
1028
1000
  }
@@ -1050,8 +1022,8 @@ const foldChunkSplitEffect = <S, R, E, In>(
1050
1022
  s: S,
1051
1023
  chunk: Chunk.Chunk<In>,
1052
1024
  contFn: Predicate<S>,
1053
- f: (s: S, input: In) => Effect.Effect<R, E, S>
1054
- ): Effect.Effect<R, E, [S, Option.Option<Chunk.Chunk<In>>]> =>
1025
+ f: (s: S, input: In) => Effect.Effect<S, E, R>
1026
+ ): Effect.Effect<[S, Option.Option<Chunk.Chunk<In>>], E, R> =>
1055
1027
  foldChunkSplitEffectInternal(s, chunk, 0, chunk.length, contFn, f)
1056
1028
 
1057
1029
  /** @internal */
@@ -1061,8 +1033,8 @@ const foldChunkSplitEffectInternal = <S, R, E, In>(
1061
1033
  index: number,
1062
1034
  length: number,
1063
1035
  contFn: Predicate<S>,
1064
- f: (s: S, input: In) => Effect.Effect<R, E, S>
1065
- ): Effect.Effect<R, E, [S, Option.Option<Chunk.Chunk<In>>]> => {
1036
+ f: (s: S, input: In) => Effect.Effect<S, E, R>
1037
+ ): Effect.Effect<[S, Option.Option<Chunk.Chunk<In>>], E, R> => {
1066
1038
  if (index === length) {
1067
1039
  return Effect.succeed([s, Option.none()])
1068
1040
  }
@@ -1077,29 +1049,29 @@ const foldChunkSplitEffectInternal = <S, R, E, In>(
1077
1049
  }
1078
1050
 
1079
1051
  /** @internal */
1080
- export const foldLeft = <S, In>(s: S, f: (s: S, input: In) => S): Sink.Sink<never, never, In, never, S> =>
1052
+ export const foldLeft = <S, In>(s: S, f: (s: S, input: In) => S): Sink.Sink<S, In> =>
1081
1053
  ignoreLeftover(fold(s, constTrue, f))
1082
1054
 
1083
1055
  /** @internal */
1084
1056
  export const foldLeftChunks = <S, In>(
1085
1057
  s: S,
1086
1058
  f: (s: S, chunk: Chunk.Chunk<In>) => S
1087
- ): Sink.Sink<never, never, In, never, S> => foldChunks(s, constTrue, f)
1059
+ ): Sink.Sink<S, In> => foldChunks(s, constTrue, f)
1088
1060
 
1089
1061
  /** @internal */
1090
- export const foldLeftChunksEffect = <S, R, E, In>(
1062
+ export const foldLeftChunksEffect = <S, In, E, R>(
1091
1063
  s: S,
1092
- f: (s: S, chunk: Chunk.Chunk<In>) => Effect.Effect<R, E, S>
1093
- ): Sink.Sink<R, E, In, never, S> => ignoreLeftover(foldChunksEffect(s, constTrue, f))
1064
+ f: (s: S, chunk: Chunk.Chunk<In>) => Effect.Effect<S, E, R>
1065
+ ): Sink.Sink<S, In, never, E, R> => ignoreLeftover(foldChunksEffect(s, constTrue, f))
1094
1066
 
1095
1067
  /** @internal */
1096
- export const foldLeftEffect = <S, R, E, In>(
1068
+ export const foldLeftEffect = <S, In, E, R>(
1097
1069
  s: S,
1098
- f: (s: S, input: In) => Effect.Effect<R, E, S>
1099
- ): Sink.Sink<R, E, In, In, S> => foldEffect(s, constTrue, f)
1070
+ f: (s: S, input: In) => Effect.Effect<S, E, R>
1071
+ ): Sink.Sink<S, In, In, E, R> => foldEffect(s, constTrue, f)
1100
1072
 
1101
1073
  /** @internal */
1102
- export const foldUntil = <S, In>(s: S, max: number, f: (z: S, input: In) => S): Sink.Sink<never, never, In, In, S> =>
1074
+ export const foldUntil = <S, In>(s: S, max: number, f: (s: S, input: In) => S): Sink.Sink<S, In, In> =>
1103
1075
  pipe(
1104
1076
  fold<[S, number], In>(
1105
1077
  [s, 0],
@@ -1110,11 +1082,11 @@ export const foldUntil = <S, In>(s: S, max: number, f: (z: S, input: In) => S):
1110
1082
  )
1111
1083
 
1112
1084
  /** @internal */
1113
- export const foldUntilEffect = <S, R, E, In>(
1085
+ export const foldUntilEffect = <S, In, E, R>(
1114
1086
  s: S,
1115
1087
  max: number,
1116
- f: (s: S, input: In) => Effect.Effect<R, E, S>
1117
- ): Sink.Sink<R, E, In, In, S> =>
1088
+ f: (s: S, input: In) => Effect.Effect<S, E, R>
1089
+ ): Sink.Sink<S, In, In, E, R> =>
1118
1090
  pipe(
1119
1091
  foldEffect(
1120
1092
  [s, 0 as number] as const,
@@ -1132,7 +1104,7 @@ export const foldWeighted = <S, In>(
1132
1104
  readonly cost: (s: S, input: In) => number
1133
1105
  readonly body: (s: S, input: In) => S
1134
1106
  }
1135
- ): Sink.Sink<never, never, In, In, S> =>
1107
+ ): Sink.Sink<S, In, In> =>
1136
1108
  foldWeightedDecompose({
1137
1109
  ...options,
1138
1110
  decompose: Chunk.of
@@ -1147,7 +1119,7 @@ export const foldWeightedDecompose = <S, In>(
1147
1119
  readonly decompose: (input: In) => Chunk.Chunk<In>
1148
1120
  readonly body: (s: S, input: In) => S
1149
1121
  }
1150
- ): Sink.Sink<never, never, In, In, S> =>
1122
+ ): Sink.Sink<S, In, In> =>
1151
1123
  suspend(() =>
1152
1124
  new SinkImpl(
1153
1125
  foldWeightedDecomposeLoop(
@@ -1171,7 +1143,7 @@ const foldWeightedDecomposeLoop = <S, In>(
1171
1143
  costFn: (s: S, input: In) => number,
1172
1144
  decompose: (input: In) => Chunk.Chunk<In>,
1173
1145
  f: (s: S, input: In) => S
1174
- ): Channel.Channel<never, never, Chunk.Chunk<In>, unknown, never, Chunk.Chunk<In>, S> =>
1146
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, S, unknown> =>
1175
1147
  core.readWith({
1176
1148
  onInput: (input: Chunk.Chunk<In>) => {
1177
1149
  const [nextS, nextCost, nextDirty, leftovers] = foldWeightedDecomposeFold(
@@ -1236,15 +1208,15 @@ const foldWeightedDecomposeFold = <In, S>(
1236
1208
  }
1237
1209
 
1238
1210
  /** @internal */
1239
- export const foldWeightedDecomposeEffect = <S, In, R, E, R2, E2, R3, E3>(
1211
+ export const foldWeightedDecomposeEffect = <S, In, E, R, E2, R2, E3, R3>(
1240
1212
  options: {
1241
1213
  readonly initial: S
1242
1214
  readonly maxCost: number
1243
- readonly cost: (s: S, input: In) => Effect.Effect<R, E, number>
1244
- readonly decompose: (input: In) => Effect.Effect<R2, E2, Chunk.Chunk<In>>
1245
- readonly body: (s: S, input: In) => Effect.Effect<R3, E3, S>
1215
+ readonly cost: (s: S, input: In) => Effect.Effect<number, E, R>
1216
+ readonly decompose: (input: In) => Effect.Effect<Chunk.Chunk<In>, E2, R2>
1217
+ readonly body: (s: S, input: In) => Effect.Effect<S, E3, R3>
1246
1218
  }
1247
- ): Sink.Sink<R | R2 | R3, E | E2 | E3, In, In, S> =>
1219
+ ): Sink.Sink<S, In, In, E | E2 | E3, R | R2 | R3> =>
1248
1220
  suspend(() =>
1249
1221
  new SinkImpl(
1250
1222
  foldWeightedDecomposeEffectLoop(
@@ -1260,14 +1232,14 @@ export const foldWeightedDecomposeEffect = <S, In, R, E, R2, E2, R3, E3>(
1260
1232
  )
1261
1233
 
1262
1234
  /** @internal */
1263
- export const foldWeightedEffect = <S, In, R, E, R2, E2>(
1235
+ export const foldWeightedEffect = <S, In, E, R, E2, R2>(
1264
1236
  options: {
1265
1237
  readonly initial: S
1266
1238
  readonly maxCost: number
1267
- readonly cost: (s: S, input: In) => Effect.Effect<R, E, number>
1268
- readonly body: (s: S, input: In) => Effect.Effect<R2, E2, S>
1239
+ readonly cost: (s: S, input: In) => Effect.Effect<number, E, R>
1240
+ readonly body: (s: S, input: In) => Effect.Effect<S, E2, R2>
1269
1241
  }
1270
- ): Sink.Sink<R | R2, E | E2, In, In, S> =>
1242
+ ): Sink.Sink<S, In, In, E | E2, R | R2> =>
1271
1243
  foldWeightedDecomposeEffect({
1272
1244
  ...options,
1273
1245
  decompose: (input) => Effect.succeed(Chunk.of(input))
@@ -1277,12 +1249,12 @@ export const foldWeightedEffect = <S, In, R, E, R2, E2>(
1277
1249
  const foldWeightedDecomposeEffectLoop = <S, In, R, E, R2, E2, R3, E3>(
1278
1250
  s: S,
1279
1251
  max: number,
1280
- costFn: (s: S, input: In) => Effect.Effect<R, E, number>,
1281
- decompose: (input: In) => Effect.Effect<R2, E2, Chunk.Chunk<In>>,
1282
- f: (s: S, input: In) => Effect.Effect<R3, E3, S>,
1252
+ costFn: (s: S, input: In) => Effect.Effect<number, E, R>,
1253
+ decompose: (input: In) => Effect.Effect<Chunk.Chunk<In>, E2, R2>,
1254
+ f: (s: S, input: In) => Effect.Effect<S, E3, R3>,
1283
1255
  cost: number,
1284
1256
  dirty: boolean
1285
- ): Channel.Channel<R | R2 | R3, E | E2 | E3, Chunk.Chunk<In>, unknown, E | E2 | E3, Chunk.Chunk<In>, S> =>
1257
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E | E2 | E3, E | E2 | E3, S, unknown, R | R2 | R3> =>
1286
1258
  core.readWith({
1287
1259
  onInput: (input: Chunk.Chunk<In>) =>
1288
1260
  pipe(
@@ -1305,14 +1277,14 @@ const foldWeightedDecomposeEffectLoop = <S, In, R, E, R2, E2, R3, E3>(
1305
1277
  const foldWeightedDecomposeEffectFold = <S, In, R, E, R2, E2, R3, E3>(
1306
1278
  s: S,
1307
1279
  max: number,
1308
- costFn: (s: S, input: In) => Effect.Effect<R, E, number>,
1309
- decompose: (input: In) => Effect.Effect<R2, E2, Chunk.Chunk<In>>,
1310
- f: (s: S, input: In) => Effect.Effect<R3, E3, S>,
1280
+ costFn: (s: S, input: In) => Effect.Effect<number, E, R>,
1281
+ decompose: (input: In) => Effect.Effect<Chunk.Chunk<In>, E2, R2>,
1282
+ f: (s: S, input: In) => Effect.Effect<S, E3, R3>,
1311
1283
  input: Chunk.Chunk<In>,
1312
1284
  dirty: boolean,
1313
1285
  cost: number,
1314
1286
  index: number
1315
- ): Effect.Effect<R | R2 | R3, E | E2 | E3, [S, number, boolean, Chunk.Chunk<In>]> => {
1287
+ ): Effect.Effect<[S, number, boolean, Chunk.Chunk<In>], E | E2 | E3, R | R2 | R3> => {
1316
1288
  if (index === input.length) {
1317
1289
  return Effect.succeed([s, cost, dirty, Chunk.empty<In>()])
1318
1290
  }
@@ -1358,24 +1330,21 @@ const foldWeightedDecomposeEffectFold = <S, In, R, E, R2, E2, R3, E3>(
1358
1330
 
1359
1331
  /** @internal */
1360
1332
  export const flatMap = dual<
1361
- <R1, E1, In, In1 extends In, L, L1, Z, Z1>(
1362
- f: (z: Z) => Sink.Sink<R1, E1, In1, L1, Z1>
1363
- ) => <R, E>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R1 | R, E1 | E, In & In1, L | L1, Z1>,
1364
- <R, E, R1, E1, In, In1 extends In, L, L1, Z, Z1>(
1365
- self: Sink.Sink<R, E, In, L, Z>,
1366
- f: (z: Z) => Sink.Sink<R1, E1, In1, L1, Z1>
1367
- ) => Sink.Sink<R1 | R, E1 | E, In & In1, L | L1, Z1>
1333
+ <A, A1, In, In1 extends In, L1, E1, R1>(
1334
+ f: (a: A) => Sink.Sink<A1, In1, L1, E1, R1>
1335
+ ) => <L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A1, In & In1, L | L1, E1 | E, R1 | R>,
1336
+ <A, In, L, E, R, A1, In1 extends In, L1, E1, R1>(
1337
+ self: Sink.Sink<A, In, L, E, R>,
1338
+ f: (a: A) => Sink.Sink<A1, In1, L1, E1, R1>
1339
+ ) => Sink.Sink<A1, In & In1, L | L1, E1 | E, R1 | R>
1368
1340
  >(
1369
1341
  2,
1370
- <R, E, R1, E1, In, In1 extends In, L, L1, Z, Z1>(
1371
- self: Sink.Sink<R, E, In, L, Z>,
1372
- f: (z: Z) => Sink.Sink<R1, E1, In1, L1, Z1>
1373
- ): Sink.Sink<R | R1, E | E1, In & In1, L | L1, Z1> => foldSink(self, { onFailure: fail, onSuccess: f })
1342
+ (self, f) => foldSink(self, { onFailure: fail, onSuccess: f })
1374
1343
  )
1375
1344
 
1376
1345
  /** @internal */
1377
- export const forEach = <In, R, E, _>(f: (input: In) => Effect.Effect<R, E, _>): Sink.Sink<R, E, In, never, void> => {
1378
- const process: Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, never, void> = core.readWithCause({
1346
+ export const forEach = <In, _, E, R>(f: (input: In) => Effect.Effect<_, E, R>): Sink.Sink<void, In, never, E, R> => {
1347
+ const process: Channel.Channel<never, Chunk.Chunk<In>, E, E, void, unknown, R> = core.readWithCause({
1379
1348
  onInput: (input: Chunk.Chunk<In>) =>
1380
1349
  pipe(core.fromEffect(Effect.forEach(input, (v) => f(v), { discard: true })), core.flatMap(() => process)),
1381
1350
  onFailure: core.failCause,
@@ -1385,10 +1354,10 @@ export const forEach = <In, R, E, _>(f: (input: In) => Effect.Effect<R, E, _>):
1385
1354
  }
1386
1355
 
1387
1356
  /** @internal */
1388
- export const forEachChunk = <In, R, E, _>(
1389
- f: (input: Chunk.Chunk<In>) => Effect.Effect<R, E, _>
1390
- ): Sink.Sink<R, E, In, never, void> => {
1391
- const process: Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, never, void> = core.readWithCause({
1357
+ export const forEachChunk = <In, _, E, R>(
1358
+ f: (input: Chunk.Chunk<In>) => Effect.Effect<_, E, R>
1359
+ ): Sink.Sink<void, In, never, E, R> => {
1360
+ const process: Channel.Channel<never, Chunk.Chunk<In>, E, E, void, unknown, R> = core.readWithCause({
1392
1361
  onInput: (input: Chunk.Chunk<In>) => pipe(core.fromEffect(f(input)), core.flatMap(() => process)),
1393
1362
  onFailure: core.failCause,
1394
1363
  onDone: () => core.unit
@@ -1397,10 +1366,10 @@ export const forEachChunk = <In, R, E, _>(
1397
1366
  }
1398
1367
 
1399
1368
  /** @internal */
1400
- export const forEachWhile = <In, R, E>(
1401
- f: (input: In) => Effect.Effect<R, E, boolean>
1402
- ): Sink.Sink<R, E, In, In, void> => {
1403
- const process: Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<In>, void> = core.readWithCause({
1369
+ export const forEachWhile = <In, E, R>(
1370
+ f: (input: In) => Effect.Effect<boolean, E, R>
1371
+ ): Sink.Sink<void, In, In, E, R> => {
1372
+ const process: Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E, E, void, unknown, R> = core.readWithCause({
1404
1373
  onInput: (input: Chunk.Chunk<In>) => forEachWhileReader(f, input, 0, input.length, process),
1405
1374
  onFailure: core.failCause,
1406
1375
  onDone: () => core.unit
@@ -1409,13 +1378,13 @@ export const forEachWhile = <In, R, E>(
1409
1378
  }
1410
1379
 
1411
1380
  /** @internal */
1412
- const forEachWhileReader = <In, R, E>(
1413
- f: (input: In) => Effect.Effect<R, E, boolean>,
1381
+ const forEachWhileReader = <In, E, R>(
1382
+ f: (input: In) => Effect.Effect<boolean, E, R>,
1414
1383
  input: Chunk.Chunk<In>,
1415
1384
  index: number,
1416
1385
  length: number,
1417
- cont: Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<In>, void>
1418
- ): Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<In>, void> => {
1386
+ cont: Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E, E, void, unknown, R>
1387
+ ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, E, E, void, unknown, R> => {
1419
1388
  if (index === length) {
1420
1389
  return cont
1421
1390
  }
@@ -1431,10 +1400,10 @@ const forEachWhileReader = <In, R, E>(
1431
1400
  }
1432
1401
 
1433
1402
  /** @internal */
1434
- export const forEachChunkWhile = <In, R, E>(
1435
- f: (input: Chunk.Chunk<In>) => Effect.Effect<R, E, boolean>
1436
- ): Sink.Sink<R, E, In, In, void> => {
1437
- const reader: Channel.Channel<R, E, Chunk.Chunk<In>, unknown, E, never, void> = core.readWith({
1403
+ export const forEachChunkWhile = <In, E, R>(
1404
+ f: (input: Chunk.Chunk<In>) => Effect.Effect<boolean, E, R>
1405
+ ): Sink.Sink<void, In, In, E, R> => {
1406
+ const reader: Channel.Channel<never, Chunk.Chunk<In>, E, E, void, unknown, R> = core.readWith({
1438
1407
  onInput: (input: Chunk.Chunk<In>) =>
1439
1408
  pipe(
1440
1409
  core.fromEffect(f(input)),
@@ -1447,12 +1416,12 @@ export const forEachChunkWhile = <In, R, E>(
1447
1416
  }
1448
1417
 
1449
1418
  /** @internal */
1450
- export const fromChannel = <R, E, In, L, Z>(
1451
- channel: Channel.Channel<R, never, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<L>, Z>
1452
- ): Sink.Sink<R, E, In, L, Z> => new SinkImpl(channel)
1419
+ export const fromChannel = <L, In, E, A, R>(
1420
+ channel: Channel.Channel<Chunk.Chunk<L>, Chunk.Chunk<In>, E, never, A, unknown, R>
1421
+ ): Sink.Sink<A, In, L, E, R> => new SinkImpl(channel)
1453
1422
 
1454
1423
  /** @internal */
1455
- export const fromEffect = <R, E, Z>(effect: Effect.Effect<R, E, Z>): Sink.Sink<R, E, unknown, never, Z> =>
1424
+ export const fromEffect = <A, E, R>(effect: Effect.Effect<A, E, R>): Sink.Sink<A, unknown, never, E, R> =>
1456
1425
  new SinkImpl(core.fromEffect(effect))
1457
1426
 
1458
1427
  /** @internal */
@@ -1461,23 +1430,23 @@ export const fromPubSub = <In>(
1461
1430
  options?: {
1462
1431
  readonly shutdown?: boolean | undefined
1463
1432
  }
1464
- ): Sink.Sink<never, never, In, never, void> => fromQueue(pubsub, options)
1433
+ ): Sink.Sink<void, In> => fromQueue(pubsub, options)
1465
1434
 
1466
1435
  /** @internal */
1467
- export const fromPush = <R, E, In, L, Z>(
1436
+ export const fromPush = <In, E, A, L, R>(
1468
1437
  push: Effect.Effect<
1469
- R,
1438
+ (_: Option.Option<Chunk.Chunk<In>>) => Effect.Effect<void, readonly [Either.Either<E, A>, Chunk.Chunk<L>], R>,
1470
1439
  never,
1471
- (_: Option.Option<Chunk.Chunk<In>>) => Effect.Effect<R, readonly [Either.Either<E, Z>, Chunk.Chunk<L>], void>
1440
+ R
1472
1441
  >
1473
- ): Sink.Sink<Exclude<R, Scope.Scope>, E, In, L, Z> =>
1442
+ ): Sink.Sink<A, In, L, E, Exclude<R, Scope.Scope>> =>
1474
1443
  new SinkImpl(channel.unwrapScoped(pipe(push, Effect.map(fromPushPull))))
1475
1444
 
1476
1445
  const fromPushPull = <R, E, In, L, Z>(
1477
1446
  push: (
1478
1447
  option: Option.Option<Chunk.Chunk<In>>
1479
- ) => Effect.Effect<R, readonly [Either.Either<E, Z>, Chunk.Chunk<L>], void>
1480
- ): Channel.Channel<R, never, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<L>, Z> =>
1448
+ ) => Effect.Effect<void, readonly [Either.Either<E, Z>, Chunk.Chunk<L>], R>
1449
+ ): Channel.Channel<Chunk.Chunk<L>, Chunk.Chunk<In>, E, never, Z, unknown, R> =>
1481
1450
  core.readWith({
1482
1451
  onInput: (input: Chunk.Chunk<In>) =>
1483
1452
  channel.foldChannel(core.fromEffect(push(Option.some(input))), {
@@ -1511,7 +1480,7 @@ export const fromQueue = <In>(
1511
1480
  options?: {
1512
1481
  readonly shutdown?: boolean | undefined
1513
1482
  }
1514
- ): Sink.Sink<never, never, In, never, void> =>
1483
+ ): Sink.Sink<void, In> =>
1515
1484
  options?.shutdown ?
1516
1485
  unwrapScoped(
1517
1486
  Effect.map(
@@ -1522,7 +1491,7 @@ export const fromQueue = <In>(
1522
1491
  forEachChunk((input: Chunk.Chunk<In>) => pipe(Queue.offerAll(queue, input)))
1523
1492
 
1524
1493
  /** @internal */
1525
- export const head = <In>(): Sink.Sink<never, never, In, In, Option.Option<In>> =>
1494
+ export const head = <In>(): Sink.Sink<Option.Option<In>, In, In> =>
1526
1495
  fold(
1527
1496
  Option.none() as Option.Option<In>,
1528
1497
  Option.isNone,
@@ -1534,138 +1503,123 @@ export const head = <In>(): Sink.Sink<never, never, In, In, Option.Option<In>> =
1534
1503
  )
1535
1504
 
1536
1505
  /** @internal */
1537
- export const ignoreLeftover = <R, E, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>): Sink.Sink<R, E, In, never, Z> =>
1506
+ export const ignoreLeftover = <A, In, L, E, R>(self: Sink.Sink<A, In, L, E, R>): Sink.Sink<A, In, never, E, R> =>
1538
1507
  new SinkImpl(channel.drain(toChannel(self)))
1539
1508
 
1540
1509
  /** @internal */
1541
- export const last = <In>(): Sink.Sink<never, never, In, In, Option.Option<In>> =>
1510
+ export const last = <In>(): Sink.Sink<Option.Option<In>, In, In> =>
1542
1511
  foldLeftChunks(Option.none<In>(), (s, input) => Option.orElse(Chunk.last(input), () => s))
1543
1512
 
1544
1513
  /** @internal */
1545
- export const leftover = <L>(chunk: Chunk.Chunk<L>): Sink.Sink<never, never, unknown, L, void> =>
1514
+ export const leftover = <L>(chunk: Chunk.Chunk<L>): Sink.Sink<void, unknown, L> =>
1546
1515
  new SinkImpl(core.suspend(() => core.write(chunk)))
1547
1516
 
1548
1517
  /** @internal */
1549
1518
  export const map = dual<
1550
- <Z, Z2>(f: (z: Z) => Z2) => <R, E, In, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In, L, Z2>,
1551
- <R, E, In, L, Z, Z2>(self: Sink.Sink<R, E, In, L, Z>, f: (z: Z) => Z2) => Sink.Sink<R, E, In, L, Z2>
1552
- >(2, <R, E, In, L, Z, Z2>(self: Sink.Sink<R, E, In, L, Z>, f: (z: Z) => Z2): Sink.Sink<R, E, In, L, Z2> => {
1519
+ <A, A2>(f: (a: A) => A2) => <In, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In, L, E, R>,
1520
+ <A, In, L, E, R, A2>(self: Sink.Sink<A, In, L, E, R>, f: (a: A) => A2) => Sink.Sink<A2, In, L, E, R>
1521
+ >(2, (self, f) => {
1553
1522
  return new SinkImpl(pipe(toChannel(self), channel.map(f)))
1554
1523
  })
1555
1524
 
1556
1525
  /** @internal */
1557
1526
  export const mapEffect = dual<
1558
- <Z, R2, E2, Z2>(
1559
- f: (z: Z) => Effect.Effect<R2, E2, Z2>
1560
- ) => <R, E, In, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In, L, Z2>,
1561
- <R, E, In, L, Z, R2, E2, Z2>(
1562
- self: Sink.Sink<R, E, In, L, Z>,
1563
- f: (z: Z) => Effect.Effect<R2, E2, Z2>
1564
- ) => Sink.Sink<R2 | R, E2 | E, In, L, Z2>
1527
+ <A, A2, E2, R2>(
1528
+ f: (a: A) => Effect.Effect<A2, E2, R2>
1529
+ ) => <In, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In, L, E2 | E, R2 | R>,
1530
+ <A, In, L, E, R, A2, E2, R2>(
1531
+ self: Sink.Sink<A, In, L, E, R>,
1532
+ f: (a: A) => Effect.Effect<A2, E2, R2>
1533
+ ) => Sink.Sink<A2, In, L, E2 | E, R2 | R>
1565
1534
  >(
1566
1535
  2,
1567
- <R, E, In, L, Z, R2, E2, Z2>(
1568
- self: Sink.Sink<R, E, In, L, Z>,
1569
- f: (z: Z) => Effect.Effect<R2, E2, Z2>
1570
- ): Sink.Sink<R | R2, E | E2, In, L, Z2> => new SinkImpl(pipe(toChannel(self), channel.mapEffect(f)))
1536
+ (self, f) => new SinkImpl(pipe(toChannel(self), channel.mapEffect(f)))
1571
1537
  )
1572
1538
 
1573
1539
  /** @internal */
1574
1540
  export const mapError = dual<
1575
- <E, E2>(f: (error: E) => E2) => <R, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E2, In, L, Z>,
1576
- <R, In, L, Z, E, E2>(self: Sink.Sink<R, E, In, L, Z>, f: (error: E) => E2) => Sink.Sink<R, E2, In, L, Z>
1541
+ <E, E2>(f: (error: E) => E2) => <A, In, L, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, L, E2, R>,
1542
+ <A, In, L, E, R, E2>(self: Sink.Sink<A, In, L, E, R>, f: (error: E) => E2) => Sink.Sink<A, In, L, E2, R>
1577
1543
  >(
1578
1544
  2,
1579
- <R, In, L, Z, E, E2>(self: Sink.Sink<R, E, In, L, Z>, f: (error: E) => E2): Sink.Sink<R, E2, In, L, Z> =>
1580
- new SinkImpl(pipe(toChannel(self), channel.mapError(f)))
1545
+ (self, f) => new SinkImpl(pipe(toChannel(self), channel.mapError(f)))
1581
1546
  )
1582
1547
 
1583
1548
  /** @internal */
1584
1549
  export const mapLeftover = dual<
1585
- <L, L2>(f: (leftover: L) => L2) => <R, E, In, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In, L2, Z>,
1586
- <R, E, In, Z, L, L2>(self: Sink.Sink<R, E, In, L, Z>, f: (leftover: L) => L2) => Sink.Sink<R, E, In, L2, Z>
1550
+ <L, L2>(f: (leftover: L) => L2) => <A, In, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, L2, E, R>,
1551
+ <A, In, L, E, R, L2>(self: Sink.Sink<A, In, L, E, R>, f: (leftover: L) => L2) => Sink.Sink<A, In, L2, E, R>
1587
1552
  >(
1588
1553
  2,
1589
- <R, E, In, Z, L, L2>(self: Sink.Sink<R, E, In, L, Z>, f: (leftover: L) => L2): Sink.Sink<R, E, In, L2, Z> =>
1590
- new SinkImpl(pipe(toChannel(self), channel.mapOut(Chunk.map(f))))
1554
+ (self, f) => new SinkImpl(pipe(toChannel(self), channel.mapOut(Chunk.map(f))))
1591
1555
  )
1592
1556
 
1593
1557
  /** @internal */
1594
- export const never: Sink.Sink<never, never, unknown, never, never> = fromEffect(Effect.never)
1558
+ export const never: Sink.Sink<never, unknown> = fromEffect(Effect.never)
1595
1559
 
1596
1560
  /** @internal */
1597
1561
  export const orElse = dual<
1598
- <R2, E2, In2, L2, Z2>(
1599
- that: LazyArg<Sink.Sink<R2, E2, In2, L2, Z2>>
1600
- ) => <R, E, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In & In2, L2 | L, Z2 | Z>,
1601
- <R, E, In, L, Z, R2, E2, In2, L2, Z2>(
1602
- self: Sink.Sink<R, E, In, L, Z>,
1603
- that: LazyArg<Sink.Sink<R2, E2, In2, L2, Z2>>
1604
- ) => Sink.Sink<R2 | R, E2 | E, In & In2, L2 | L, Z2 | Z>
1562
+ <A2, In2, L2, E2, R2>(
1563
+ that: LazyArg<Sink.Sink<A2, In2, L2, E2, R2>>
1564
+ ) => <A, In, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2 | A, In & In2, L2 | L, E2 | E, R2 | R>,
1565
+ <A, In, L, E, R, A2, In2, L2, E2, R2>(
1566
+ self: Sink.Sink<A, In, L, E, R>,
1567
+ that: LazyArg<Sink.Sink<A2, In2, L2, E2, R2>>
1568
+ ) => Sink.Sink<A2 | A, In & In2, L2 | L, E2 | E, R2 | R>
1605
1569
  >(
1606
1570
  2,
1607
- <R, E, In, L, Z, R2, E2, In2, L2, Z2>(
1608
- self: Sink.Sink<R, E, In, L, Z>,
1609
- that: LazyArg<Sink.Sink<R2, E2, In2, L2, Z2>>
1610
- ): Sink.Sink<R | R2, E | E2, In & In2, L | L2, Z | Z2> =>
1611
- new SinkImpl<R | R2, E | E2, In & In2, L | L2, Z | Z2>(
1571
+ <A, In, L, E, R, A2, In2, L2, E2, R2>(
1572
+ self: Sink.Sink<A, In, L, E, R>,
1573
+ that: LazyArg<Sink.Sink<A2, In2, L2, E2, R2>>
1574
+ ): Sink.Sink<A | A2, In & In2, L | L2, E | E2, R | R2> =>
1575
+ new SinkImpl<A | A2, In & In2, L | L2, E | E2, R | R2>(
1612
1576
  pipe(toChannel(self), channel.orElse(() => toChannel(that())))
1613
1577
  )
1614
1578
  )
1615
1579
 
1616
1580
  /** @internal */
1617
1581
  export const provideContext = dual<
1618
- <R>(context: Context.Context<R>) => <E, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<never, E, In, L, Z>,
1619
- <E, In, L, Z, R>(self: Sink.Sink<R, E, In, L, Z>, context: Context.Context<R>) => Sink.Sink<never, E, In, L, Z>
1582
+ <R>(context: Context.Context<R>) => <A, In, L, E>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, L, E>,
1583
+ <A, In, L, E, R>(self: Sink.Sink<A, In, L, E, R>, context: Context.Context<R>) => Sink.Sink<A, In, L, E>
1620
1584
  >(
1621
1585
  2,
1622
- <E, In, L, Z, R>(self: Sink.Sink<R, E, In, L, Z>, context: Context.Context<R>): Sink.Sink<never, E, In, L, Z> =>
1623
- new SinkImpl(pipe(toChannel(self), core.provideContext(context)))
1586
+ (self, context) => new SinkImpl(pipe(toChannel(self), core.provideContext(context)))
1624
1587
  )
1625
1588
 
1626
1589
  /** @internal */
1627
1590
  export const race = dual<
1628
- <R1, E1, In1, L1, Z1>(
1629
- that: Sink.Sink<R1, E1, In1, L1, Z1>
1630
- ) => <R, E, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R1 | R, E1 | E, In & In1, L1 | L, Z1 | Z>,
1631
- <R, E, In, L, Z, R1, E1, In1, L1, Z1>(
1632
- self: Sink.Sink<R, E, In, L, Z>,
1633
- that: Sink.Sink<R1, E1, In1, L1, Z1>
1634
- ) => Sink.Sink<R1 | R, E1 | E, In & In1, L1 | L, Z1 | Z>
1591
+ <R1, E1, In1, L1, A1>(
1592
+ that: Sink.Sink<A1, In1, L1, E1, R1>
1593
+ ) => <R, E, In, L, A>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A1 | A, In & In1, L1 | L, E1 | E, R1 | R>,
1594
+ <A, In, L, E, R, A1, In1, L1, E1, R1>(
1595
+ self: Sink.Sink<A, In, L, E, R>,
1596
+ that: Sink.Sink<A1, In1, L1, E1, R1>
1597
+ ) => Sink.Sink<A1 | A, In & In1, L1 | L, E1 | E, R1 | R>
1635
1598
  >(
1636
1599
  2,
1637
- <R, E, In, L, Z, R1, E1, In1, L1, Z1>(
1638
- self: Sink.Sink<R, E, In, L, Z>,
1639
- that: Sink.Sink<R1, E1, In1, L1, Z1>
1640
- ): Sink.Sink<R | R1, E | E1, In & In1, L | L1, Z | Z1> => pipe(self, raceBoth(that), map(Either.merge))
1600
+ (self, that) => pipe(self, raceBoth(that), map(Either.merge))
1641
1601
  )
1642
1602
 
1643
1603
  /** @internal */
1644
1604
  export const raceBoth = dual<
1645
- <R1, E1, In1, L1, Z1>(
1646
- that: Sink.Sink<R1, E1, In1, L1, Z1>,
1605
+ <A1, In1, L1, E1, R1>(
1606
+ that: Sink.Sink<A1, In1, L1, E1, R1>,
1647
1607
  options?: {
1648
1608
  readonly capacity?: number | undefined
1649
1609
  }
1650
- ) => <R, E, In, L, Z>(
1651
- self: Sink.Sink<R, E, In, L, Z>
1652
- ) => Sink.Sink<R1 | R, E1 | E, In & In1, L1 | L, Either.Either<Z, Z1>>,
1653
- <R, E, In, L, Z, R1, E1, In1, L1, Z1>(
1654
- self: Sink.Sink<R, E, In, L, Z>,
1655
- that: Sink.Sink<R1, E1, In1, L1, Z1>,
1610
+ ) => <A, In, L, E, R>(
1611
+ self: Sink.Sink<A, In, L, E, R>
1612
+ ) => Sink.Sink<Either.Either<A, A1>, In & In1, L1 | L, E1 | E, R1 | R>,
1613
+ <A, In, L, E, R, A1, In1, L1, E1, R1>(
1614
+ self: Sink.Sink<A, In, L, E, R>,
1615
+ that: Sink.Sink<A1, In1, L1, E1, R1>,
1656
1616
  options?: {
1657
1617
  readonly capacity?: number | undefined
1658
1618
  }
1659
- ) => Sink.Sink<R1 | R, E1 | E, In & In1, L1 | L, Either.Either<Z, Z1>>
1619
+ ) => Sink.Sink<Either.Either<A, A1>, In & In1, L1 | L, E1 | E, R1 | R>
1660
1620
  >(
1661
1621
  (args) => isSink(args[1]),
1662
- <R, E, In, L, Z, R1, E1, In1, L1, Z1>(
1663
- self: Sink.Sink<R, E, In, L, Z>,
1664
- that: Sink.Sink<R1, E1, In1, L1, Z1>,
1665
- options?: {
1666
- readonly capacity?: number | undefined
1667
- }
1668
- ): Sink.Sink<R | R1, E | E1, In & In1, L | L1, Either.Either<Z, Z1>> =>
1622
+ (self, that, options) =>
1669
1623
  raceWith(self, {
1670
1624
  other: that,
1671
1625
  onSelfDone: (selfDone) => mergeDecision.Done(Effect.map(selfDone, Either.left)),
@@ -1676,37 +1630,37 @@ export const raceBoth = dual<
1676
1630
 
1677
1631
  /** @internal */
1678
1632
  export const raceWith = dual<
1679
- <R2, E2, In2, L2, Z2, E, Z, Z3, Z4>(
1633
+ <A2, In2, L2, E2, R2, A, E, A3, A4>(
1680
1634
  options: {
1681
- readonly other: Sink.Sink<R2, E2, In2, L2, Z2>
1682
- readonly onSelfDone: (exit: Exit.Exit<E, Z>) => MergeDecision.MergeDecision<R2, E2, Z2, E2 | E, Z3>
1683
- readonly onOtherDone: (exit: Exit.Exit<E2, Z2>) => MergeDecision.MergeDecision<R2, E, Z, E2 | E, Z4>
1635
+ readonly other: Sink.Sink<A2, In2, L2, E2, R2>
1636
+ readonly onSelfDone: (exit: Exit.Exit<A, E>) => MergeDecision.MergeDecision<R2, E2, A2, E2 | E, A3>
1637
+ readonly onOtherDone: (exit: Exit.Exit<A2, E2>) => MergeDecision.MergeDecision<R2, E, A, E2 | E, A4>
1684
1638
  readonly capacity?: number | undefined
1685
1639
  }
1686
- ) => <R, In, L>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In & In2, L2 | L, Z3 | Z4>,
1687
- <R, In, L, R2, E2, In2, L2, Z2, E, Z, Z3, Z4>(
1688
- self: Sink.Sink<R, E, In, L, Z>,
1640
+ ) => <In, L, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A3 | A4, In & In2, L2 | L, E2 | E, R2 | R>,
1641
+ <A, In, L, E, R, A2, In2, L2, E2, R2, A3, A4>(
1642
+ self: Sink.Sink<A, In, L, E, R>,
1689
1643
  options: {
1690
- readonly other: Sink.Sink<R2, E2, In2, L2, Z2>
1691
- readonly onSelfDone: (exit: Exit.Exit<E, Z>) => MergeDecision.MergeDecision<R2, E2, Z2, E2 | E, Z3>
1692
- readonly onOtherDone: (exit: Exit.Exit<E2, Z2>) => MergeDecision.MergeDecision<R2, E, Z, E2 | E, Z4>
1644
+ readonly other: Sink.Sink<A2, In2, L2, E2, R2>
1645
+ readonly onSelfDone: (exit: Exit.Exit<A, E>) => MergeDecision.MergeDecision<R2, E2, A2, E2 | E, A3>
1646
+ readonly onOtherDone: (exit: Exit.Exit<A2, E2>) => MergeDecision.MergeDecision<R2, E, A, E2 | E, A4>
1693
1647
  readonly capacity?: number | undefined
1694
1648
  }
1695
- ) => Sink.Sink<R2 | R, E2 | E, In & In2, L2 | L, Z3 | Z4>
1649
+ ) => Sink.Sink<A3 | A4, In & In2, L2 | L, E2 | E, R2 | R>
1696
1650
  >(
1697
1651
  2,
1698
- <R, In, L, R2, E2, In2, L2, Z2, E, Z, Z3, Z4>(
1699
- self: Sink.Sink<R, E, In, L, Z>,
1652
+ <A, In, L, E, R, A2, In2, L2, E2, R2, A3, A4>(
1653
+ self: Sink.Sink<A, In, L, E, R>,
1700
1654
  options: {
1701
- readonly other: Sink.Sink<R2, E2, In2, L2, Z2>
1702
- readonly onSelfDone: (exit: Exit.Exit<E, Z>) => MergeDecision.MergeDecision<R2, E2, Z2, E2 | E, Z3>
1703
- readonly onOtherDone: (exit: Exit.Exit<E2, Z2>) => MergeDecision.MergeDecision<R2, E, Z, E2 | E, Z4>
1655
+ readonly other: Sink.Sink<A2, In2, L2, E2, R2>
1656
+ readonly onSelfDone: (exit: Exit.Exit<A, E>) => MergeDecision.MergeDecision<R2, E2, A2, E2 | E, A3>
1657
+ readonly onOtherDone: (exit: Exit.Exit<A2, E2>) => MergeDecision.MergeDecision<R2, E, A, E2 | E, A4>
1704
1658
  readonly capacity?: number | undefined
1705
1659
  }
1706
- ): Sink.Sink<R | R2, E | E2, In & In2, L | L2, Z3 | Z4> => {
1660
+ ): Sink.Sink<A3 | A4, In & In2, L2 | L, E2 | E, R2 | R> => {
1707
1661
  const scoped = Effect.gen(function*($) {
1708
1662
  const pubsub = yield* $(
1709
- PubSub.bounded<Either.Either<Exit.Exit<never, unknown>, Chunk.Chunk<In & In2>>>(options?.capacity ?? 16)
1663
+ PubSub.bounded<Either.Either<Exit.Exit<unknown>, Chunk.Chunk<In & In2>>>(options?.capacity ?? 16)
1710
1664
  )
1711
1665
  const channel1 = yield* $(channel.fromPubSubScoped(pubsub))
1712
1666
  const channel2 = yield* $(channel.fromPubSubScoped(pubsub))
@@ -1721,13 +1675,13 @@ export const raceWith = dual<
1721
1675
  })
1722
1676
  )
1723
1677
  const racedChannel: Channel.Channel<
1724
- R | R2,
1725
- never,
1678
+ Chunk.Chunk<L | L2>,
1726
1679
  Chunk.Chunk<In & In2>,
1727
- unknown,
1728
1680
  E | E2,
1729
- Chunk.Chunk<L | L2>,
1730
- Z3 | Z4
1681
+ never,
1682
+ A3 | A4,
1683
+ unknown,
1684
+ R | R2
1731
1685
  > = channel.mergeWith(reader, {
1732
1686
  other: writer,
1733
1687
  onSelfDone: (_) => mergeDecision.Await((exit) => Effect.suspend(() => exit)),
@@ -1743,17 +1697,14 @@ export const raceWith = dual<
1743
1697
  export const refineOrDie = dual<
1744
1698
  <E, E2>(
1745
1699
  pf: (error: E) => Option.Option<E2>
1746
- ) => <R, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E2, In, L, Z>,
1747
- <R, In, L, Z, E, E2>(
1748
- self: Sink.Sink<R, E, In, L, Z>,
1700
+ ) => <A, In, L, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, L, E2, R>,
1701
+ <A, In, L, E, R, E2>(
1702
+ self: Sink.Sink<A, In, L, E, R>,
1749
1703
  pf: (error: E) => Option.Option<E2>
1750
- ) => Sink.Sink<R, E2, In, L, Z>
1704
+ ) => Sink.Sink<A, In, L, E2, R>
1751
1705
  >(
1752
1706
  2,
1753
- <R, In, L, Z, E, E2>(
1754
- self: Sink.Sink<R, E, In, L, Z>,
1755
- pf: (error: E) => Option.Option<E2>
1756
- ): Sink.Sink<R, E2, In, L, Z> => pipe(self, refineOrDieWith(pf, identity))
1707
+ (self, pf) => pipe(self, refineOrDieWith(pf, identity))
1757
1708
  )
1758
1709
 
1759
1710
  /** @internal */
@@ -1761,19 +1712,15 @@ export const refineOrDieWith = dual<
1761
1712
  <E, E2>(
1762
1713
  pf: (error: E) => Option.Option<E2>,
1763
1714
  f: (error: E) => unknown
1764
- ) => <R, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E2, In, L, Z>,
1765
- <R, In, L, Z, E, E2>(
1766
- self: Sink.Sink<R, E, In, L, Z>,
1715
+ ) => <A, In, L, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, L, E2, R>,
1716
+ <A, In, L, E, R, E2>(
1717
+ self: Sink.Sink<A, In, L, E, R>,
1767
1718
  pf: (error: E) => Option.Option<E2>,
1768
1719
  f: (error: E) => unknown
1769
- ) => Sink.Sink<R, E2, In, L, Z>
1720
+ ) => Sink.Sink<A, In, L, E2, R>
1770
1721
  >(
1771
1722
  3,
1772
- <R, In, L, Z, E, E2>(
1773
- self: Sink.Sink<R, E, In, L, Z>,
1774
- pf: (error: E) => Option.Option<E2>,
1775
- f: (error: E) => unknown
1776
- ): Sink.Sink<R, E2, In, L, Z> => {
1723
+ (self, pf, f) => {
1777
1724
  const newChannel = pipe(
1778
1725
  self,
1779
1726
  toChannel,
@@ -1791,41 +1738,41 @@ export const refineOrDieWith = dual<
1791
1738
  /** @internal */
1792
1739
  export const service = <T extends Context.Tag<any, any>>(
1793
1740
  tag: T
1794
- ): Sink.Sink<Context.Tag.Identifier<T>, never, unknown, never, Context.Tag.Service<T>> => serviceWith(tag, identity)
1741
+ ): Sink.Sink<Context.Tag.Service<T>, unknown, never, never, Context.Tag.Identifier<T>> => serviceWith(tag, identity)
1795
1742
 
1796
1743
  /** @internal */
1797
1744
  export const serviceWith = <T extends Context.Tag<any, any>, Z>(
1798
1745
  tag: T,
1799
1746
  f: (service: Context.Tag.Service<T>) => Z
1800
- ): Sink.Sink<Context.Tag.Identifier<T>, never, unknown, never, Z> => fromEffect(Effect.map(tag, f))
1747
+ ): Sink.Sink<Z, unknown, never, never, Context.Tag.Identifier<T>> => fromEffect(Effect.map(tag, f))
1801
1748
 
1802
1749
  /** @internal */
1803
1750
  export const serviceWithEffect = <T extends Context.Tag<any, any>, R, E, Z>(
1804
1751
  tag: T,
1805
- f: (service: Context.Tag.Service<T>) => Effect.Effect<R, E, Z>
1806
- ): Sink.Sink<R | Context.Tag.Identifier<T>, E, unknown, never, Z> => fromEffect(Effect.flatMap(tag, f))
1752
+ f: (service: Context.Tag.Service<T>) => Effect.Effect<Z, E, R>
1753
+ ): Sink.Sink<Z, unknown, never, E, R | Context.Tag.Identifier<T>> => fromEffect(Effect.flatMap(tag, f))
1807
1754
 
1808
1755
  /** @internal */
1809
1756
  export const serviceWithSink = <T extends Context.Tag<any, any>, R, E, In, L, Z>(
1810
1757
  tag: T,
1811
- f: (service: Context.Tag.Service<T>) => Sink.Sink<R, E, In, L, Z>
1812
- ): Sink.Sink<R | Context.Tag.Identifier<T>, E, In, L, Z> =>
1758
+ f: (service: Context.Tag.Service<T>) => Sink.Sink<Z, In, L, E, R>
1759
+ ): Sink.Sink<Z, In, L, E, R | Context.Tag.Identifier<T>> =>
1813
1760
  new SinkImpl(pipe(Effect.map(tag, (service) => toChannel(f(service))), channel.unwrap))
1814
1761
 
1815
1762
  /** @internal */
1816
- export const some = <In>(predicate: Predicate<In>): Sink.Sink<never, never, In, In, boolean> =>
1763
+ export const some = <In>(predicate: Predicate<In>): Sink.Sink<boolean, In, In> =>
1817
1764
  fold(false, (bool) => !bool, (acc, input) => acc || predicate(input))
1818
1765
 
1819
1766
  /** @internal */
1820
1767
  export const splitWhere = dual<
1821
- <In>(f: Predicate<In>) => <R, E, L extends In, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R, E, In, In, Z>,
1822
- <R, E, L extends In, Z, In>(self: Sink.Sink<R, E, In, L, Z>, f: Predicate<In>) => Sink.Sink<R, E, In, In, Z>
1823
- >(2, <R, E, L extends In, Z, In>(self: Sink.Sink<R, E, In, L, Z>, f: Predicate<In>): Sink.Sink<R, E, In, In, Z> => {
1768
+ <In>(f: Predicate<In>) => <A, L extends In, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In, In, E, R>,
1769
+ <A, In, L extends In, E, R>(self: Sink.Sink<A, In, L, E, R>, f: Predicate<In>) => Sink.Sink<A, In, In, E, R>
1770
+ >(2, <A, In, L extends In, E, R>(self: Sink.Sink<A, In, L, E, R>, f: Predicate<In>): Sink.Sink<A, In, In, E, R> => {
1824
1771
  const newChannel = pipe(
1825
1772
  core.fromEffect(Ref.make(Chunk.empty<In>())),
1826
1773
  core.flatMap((ref) =>
1827
1774
  pipe(
1828
- splitWhereSplitter<E, In>(false, ref, f),
1775
+ splitWhereSplitter<In, E>(false, ref, f),
1829
1776
  channel.pipeToOrFail(toChannel(self)),
1830
1777
  core.collectElements,
1831
1778
  core.flatMap(([leftovers, z]) =>
@@ -1846,22 +1793,22 @@ export const splitWhere = dual<
1846
1793
  })
1847
1794
 
1848
1795
  /** @internal */
1849
- const splitWhereSplitter = <E, A>(
1796
+ const splitWhereSplitter = <A, E>(
1850
1797
  written: boolean,
1851
1798
  leftovers: Ref.Ref<Chunk.Chunk<A>>,
1852
1799
  f: Predicate<A>
1853
- ): Channel.Channel<never, never, Chunk.Chunk<A>, unknown, E, Chunk.Chunk<A>, unknown> =>
1800
+ ): Channel.Channel<Chunk.Chunk<A>, Chunk.Chunk<A>, E, never, unknown, unknown> =>
1854
1801
  core.readWithCause({
1855
1802
  onInput: (input) => {
1856
1803
  if (Chunk.isEmpty(input)) {
1857
- return splitWhereSplitter<E, A>(written, leftovers, f)
1804
+ return splitWhereSplitter(written, leftovers, f)
1858
1805
  }
1859
1806
  if (written) {
1860
1807
  const index = indexWhere(input, f)
1861
1808
  if (index === -1) {
1862
1809
  return channel.zipRight(
1863
1810
  core.write(input),
1864
- splitWhereSplitter<E, A>(true, leftovers, f)
1811
+ splitWhereSplitter<A, E>(true, leftovers, f)
1865
1812
  )
1866
1813
  }
1867
1814
  const [left, right] = Chunk.splitAt(input, index)
@@ -1874,7 +1821,7 @@ const splitWhereSplitter = <E, A>(
1874
1821
  if (index === -1) {
1875
1822
  return channel.zipRight(
1876
1823
  core.write(input),
1877
- splitWhereSplitter<E, A>(true, leftovers, f)
1824
+ splitWhereSplitter<A, E>(true, leftovers, f)
1878
1825
  )
1879
1826
  }
1880
1827
  const [left, right] = pipe(input, Chunk.splitAt(Math.max(index, 1)))
@@ -1901,32 +1848,28 @@ const indexWhere = <A>(self: Chunk.Chunk<A>, predicate: Predicate<A>, from = 0):
1901
1848
  }
1902
1849
 
1903
1850
  /** @internal */
1904
- export const succeed = <Z>(z: Z): Sink.Sink<never, never, unknown, never, Z> => new SinkImpl(core.succeed(z))
1851
+ export const succeed = <A>(a: A): Sink.Sink<A, unknown> => new SinkImpl(core.succeed(a))
1905
1852
 
1906
1853
  /** @internal */
1907
- export const sum: Sink.Sink<never, never, number, never, number> = foldLeftChunks(
1854
+ export const sum: Sink.Sink<number, number> = foldLeftChunks(
1908
1855
  0,
1909
1856
  (acc, chunk) => acc + Chunk.reduce(chunk, 0, (s, a) => s + a)
1910
1857
  )
1911
1858
 
1912
1859
  /** @internal */
1913
1860
  export const summarized = dual<
1914
- <R2, E2, Z2, Z3>(
1915
- summary: Effect.Effect<R2, E2, Z2>,
1916
- f: (start: Z2, end: Z2) => Z3
1917
- ) => <R, E, In, L, Z>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In, L, [Z, Z3]>,
1918
- <R, E, In, L, Z, R2, E2, Z2, Z3>(
1919
- self: Sink.Sink<R, E, In, L, Z>,
1920
- summary: Effect.Effect<R2, E2, Z2>,
1921
- f: (start: Z2, end: Z2) => Z3
1922
- ) => Sink.Sink<R2 | R, E2 | E, In, L, [Z, Z3]>
1861
+ <A2, E2, R2, A3>(
1862
+ summary: Effect.Effect<A2, E2, R2>,
1863
+ f: (start: A2, end: A2) => A3
1864
+ ) => <A, In, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<[A, A3], In, L, E2 | E, R2 | R>,
1865
+ <A, In, L, E, R, A2, E2, R2, A3>(
1866
+ self: Sink.Sink<A, In, L, E, R>,
1867
+ summary: Effect.Effect<A2, E2, R2>,
1868
+ f: (start: A2, end: A2) => A3
1869
+ ) => Sink.Sink<[A, A3], In, L, E2 | E, R2 | R>
1923
1870
  >(
1924
1871
  3,
1925
- <R, E, In, L, Z, R2, E2, Z2, Z3>(
1926
- self: Sink.Sink<R, E, In, L, Z>,
1927
- summary: Effect.Effect<R2, E2, Z2>,
1928
- f: (start: Z2, end: Z2) => Z3
1929
- ): Sink.Sink<R | R2, E | E2, In, L, [Z, Z3]> => {
1872
+ (self, summary, f) => {
1930
1873
  const newChannel = pipe(
1931
1874
  core.fromEffect(summary),
1932
1875
  core.flatMap((start) =>
@@ -1947,11 +1890,10 @@ export const summarized = dual<
1947
1890
  )
1948
1891
 
1949
1892
  /** @internal */
1950
- export const sync = <Z>(evaluate: LazyArg<Z>): Sink.Sink<never, never, unknown, never, Z> =>
1951
- new SinkImpl(core.sync(evaluate))
1893
+ export const sync = <A>(evaluate: LazyArg<A>): Sink.Sink<A, unknown> => new SinkImpl(core.sync(evaluate))
1952
1894
 
1953
1895
  /** @internal */
1954
- export const take = <In>(n: number): Sink.Sink<never, never, In, In, Chunk.Chunk<In>> =>
1896
+ export const take = <In>(n: number): Sink.Sink<Chunk.Chunk<In>, In, In> =>
1955
1897
  pipe(
1956
1898
  foldChunks<Chunk.Chunk<In>, In>(
1957
1899
  Chunk.empty(),
@@ -1965,146 +1907,146 @@ export const take = <In>(n: number): Sink.Sink<never, never, In, In, Chunk.Chunk
1965
1907
  )
1966
1908
 
1967
1909
  /** @internal */
1968
- export const toChannel = <R, E, In, L, Z>(
1969
- self: Sink.Sink<R, E, In, L, Z>
1970
- ): Channel.Channel<R, never, Chunk.Chunk<In>, unknown, E, Chunk.Chunk<L>, Z> =>
1910
+ export const toChannel = <R, E, In, L, A>(
1911
+ self: Sink.Sink<A, In, L, E, R>
1912
+ ): Channel.Channel<Chunk.Chunk<L>, Chunk.Chunk<In>, E, never, A, unknown, R> =>
1971
1913
  Effect.isEffect(self) ?
1972
- toChannel(fromEffect(self as Effect.Effect<R, E, Z>)) :
1973
- (self as SinkImpl<R, E, In, L, Z>).channel
1914
+ toChannel(fromEffect(self as Effect.Effect<A, E, R>)) :
1915
+ (self as SinkImpl<A, In, L, E, R>).channel
1974
1916
 
1975
1917
  /** @internal */
1976
- export const unwrap = <R, E, R2, E2, In, L, Z>(
1977
- effect: Effect.Effect<R, E, Sink.Sink<R2, E2, In, L, Z>>
1978
- ): Sink.Sink<R | R2, E | E2, In, L, Z> =>
1918
+ export const unwrap = <A, In, L, E2, R2, E, R>(
1919
+ effect: Effect.Effect<Sink.Sink<A, In, L, E2, R2>, E, R>
1920
+ ): Sink.Sink<A, In, L, E | E2, R | R2> =>
1979
1921
  new SinkImpl(
1980
1922
  channel.unwrap(pipe(effect, Effect.map((sink) => toChannel(sink))))
1981
1923
  )
1982
1924
 
1983
1925
  /** @internal */
1984
- export const unwrapScoped = <R, E, In, L, Z>(
1985
- effect: Effect.Effect<R, E, Sink.Sink<R, E, In, L, Z>>
1986
- ): Sink.Sink<Exclude<R, Scope.Scope>, E, In, L, Z> => {
1926
+ export const unwrapScoped = <A, In, L, E, R>(
1927
+ effect: Effect.Effect<Sink.Sink<A, In, L, E, R>, E, R>
1928
+ ): Sink.Sink<A, In, L, E, Exclude<R, Scope.Scope>> => {
1987
1929
  return new SinkImpl(channel.unwrapScoped(pipe(effect, Effect.map((sink) => toChannel(sink)))))
1988
1930
  }
1989
1931
 
1990
1932
  /** @internal */
1991
- export const withDuration = <R, E, In, L, Z>(
1992
- self: Sink.Sink<R, E, In, L, Z>
1993
- ): Sink.Sink<R, E, In, L, [Z, Duration.Duration]> =>
1933
+ export const withDuration = <A, In, L, E, R>(
1934
+ self: Sink.Sink<A, In, L, E, R>
1935
+ ): Sink.Sink<[A, Duration.Duration], In, L, E, R> =>
1994
1936
  pipe(self, summarized(Clock.currentTimeMillis, (start, end) => Duration.millis(end - start)))
1995
1937
 
1996
1938
  /** @internal */
1997
1939
  export const zip = dual<
1998
- <R2, E2, In, In2 extends In, L, L2, Z, Z2>(
1999
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1940
+ <A2, In, In2 extends In, L2, E2, R2>(
1941
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2000
1942
  options?: {
2001
1943
  readonly concurrent?: boolean | undefined
2002
1944
  }
2003
- ) => <R, E>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, [Z, Z2]>,
2004
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2005
- self: Sink.Sink<R, E, In, L, Z>,
2006
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1945
+ ) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<[A, A2], In & In2, L | L2, E2 | E, R2 | R>,
1946
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2>(
1947
+ self: Sink.Sink<A, In, L, E, R>,
1948
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2007
1949
  options?: {
2008
1950
  readonly concurrent?: boolean | undefined
2009
1951
  }
2010
- ) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, [Z, Z2]>
1952
+ ) => Sink.Sink<[A, A2], In & In2, L | L2, E2 | E, R2 | R>
2011
1953
  >(
2012
1954
  (args) => isSink(args[1]),
2013
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2014
- self: Sink.Sink<R, E, In, L, Z>,
2015
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1955
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2>(
1956
+ self: Sink.Sink<A, In, L, E, R>,
1957
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2016
1958
  options?: {
2017
1959
  readonly concurrent?: boolean | undefined
2018
1960
  }
2019
- ): Sink.Sink<R | R2, E | E2, In & In2, L | L2, [Z, Z2]> => zipWith(self, that, (z, z2) => [z, z2], options)
1961
+ ): Sink.Sink<[A, A2], In & In2, L | L2, E2 | E, R2 | R> => zipWith(self, that, (z, z2) => [z, z2], options)
2020
1962
  )
2021
1963
 
2022
1964
  /** @internal */
2023
1965
  export const zipLeft = dual<
2024
- <R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2025
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1966
+ <A2, In, In2 extends In, L2, E2, R2>(
1967
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2026
1968
  options?: {
2027
1969
  readonly concurrent?: boolean | undefined
2028
1970
  }
2029
- ) => <R, E>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, Z>,
2030
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2031
- self: Sink.Sink<R, E, In, L, Z>,
2032
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1971
+ ) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A, In & In2, L | L2, E2 | E, R2 | R>,
1972
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2>(
1973
+ self: Sink.Sink<A, In, L, E, R>,
1974
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2033
1975
  options?: {
2034
1976
  readonly concurrent?: boolean | undefined
2035
1977
  }
2036
- ) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, Z>
1978
+ ) => Sink.Sink<A, In & In2, L | L2, E2 | E, R2 | R>
2037
1979
  >(
2038
1980
  (args) => isSink(args[1]),
2039
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2040
- self: Sink.Sink<R, E, In, L, Z>,
2041
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1981
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2>(
1982
+ self: Sink.Sink<A, In, L, E, R>,
1983
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2042
1984
  options?: {
2043
1985
  readonly concurrent?: boolean | undefined
2044
1986
  }
2045
- ): Sink.Sink<R | R2, E | E2, In & In2, L | L2, Z> => zipWith(self, that, (z, _) => z, options)
1987
+ ): Sink.Sink<A, In & In2, L | L2, E2 | E, R2 | R> => zipWith(self, that, (z, _) => z, options)
2046
1988
  )
2047
1989
 
2048
1990
  /** @internal */
2049
1991
  export const zipRight = dual<
2050
- <R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2051
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1992
+ <A2, In, In2 extends In, L2, E2, R2>(
1993
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2052
1994
  options?: {
2053
1995
  readonly concurrent?: boolean | undefined
2054
1996
  }
2055
- ) => <R, E>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, Z2>,
2056
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2057
- self: Sink.Sink<R, E, In, L, Z>,
2058
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
1997
+ ) => <A, L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A2, In & In2, L | L2, E2 | E, R2 | R>,
1998
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2>(
1999
+ self: Sink.Sink<A, In, L, E, R>,
2000
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2059
2001
  options?: {
2060
2002
  readonly concurrent?: boolean | undefined
2061
2003
  }
2062
- ) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, Z2>
2004
+ ) => Sink.Sink<A2, In & In2, L | L2, E2 | E, R2 | R>
2063
2005
  >(
2064
2006
  (args) => isSink(args[1]),
2065
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2>(
2066
- self: Sink.Sink<R, E, In, L, Z>,
2067
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
2007
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2>(
2008
+ self: Sink.Sink<A, In, L, E, R>,
2009
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2068
2010
  options?: {
2069
2011
  readonly concurrent?: boolean | undefined
2070
2012
  }
2071
- ): Sink.Sink<R | R2, E | E2, In & In2, L | L2, Z2> => zipWith(self, that, (_, z2) => z2, options)
2013
+ ): Sink.Sink<A2, In & In2, L | L2, E2 | E, R2 | R> => zipWith(self, that, (_, z2) => z2, options)
2072
2014
  )
2073
2015
 
2074
2016
  /** @internal */
2075
2017
  export const zipWith = dual<
2076
- <R2, E2, In, In2 extends In, L, L2, Z, Z2, Z3>(
2077
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
2078
- f: (z: Z, z1: Z2) => Z3,
2018
+ <A2, In, In2 extends In, L2, E2, R2, A, A3>(
2019
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2020
+ f: (a: A, a2: A2) => A3,
2079
2021
  options?: {
2080
2022
  readonly concurrent?: boolean | undefined
2081
2023
  }
2082
- ) => <R, E>(self: Sink.Sink<R, E, In, L, Z>) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, Z3>,
2083
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2, Z3>(
2084
- self: Sink.Sink<R, E, In, L, Z>,
2085
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
2086
- f: (z: Z, z1: Z2) => Z3,
2024
+ ) => <L, E, R>(self: Sink.Sink<A, In, L, E, R>) => Sink.Sink<A3, In & In2, L | L2, E2 | E, R2 | R>,
2025
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2, A3>(
2026
+ self: Sink.Sink<A, In, L, E, R>,
2027
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2028
+ f: (a: A, a2: A2) => A3,
2087
2029
  options?: {
2088
2030
  readonly concurrent?: boolean | undefined
2089
2031
  }
2090
- ) => Sink.Sink<R2 | R, E2 | E, In & In2, L | L2, Z3>
2032
+ ) => Sink.Sink<A3, In & In2, L | L2, E2 | E, R2 | R>
2091
2033
  >(
2092
2034
  (args) => isSink(args[1]),
2093
- <R, E, R2, E2, In, In2 extends In, L, L2, Z, Z2, Z3>(
2094
- self: Sink.Sink<R, E, In, L, Z>,
2095
- that: Sink.Sink<R2, E2, In2, L2, Z2>,
2096
- f: (z: Z, z1: Z2) => Z3,
2035
+ <A, In, L, E, R, A2, In2 extends In, L2, E2, R2, A3>(
2036
+ self: Sink.Sink<A, In, L, E, R>,
2037
+ that: Sink.Sink<A2, In2, L2, E2, R2>,
2038
+ f: (a: A, a2: A2) => A3,
2097
2039
  options?: {
2098
2040
  readonly concurrent?: boolean | undefined
2099
2041
  }
2100
- ): Sink.Sink<R | R2, E | E2, In & In2, L | L2, Z3> =>
2042
+ ): Sink.Sink<A3, In & In2, L | L2, E2 | E, R2 | R> =>
2101
2043
  options?.concurrent ?
2102
2044
  raceWith(self, {
2103
2045
  other: that,
2104
2046
  onSelfDone: Exit.match({
2105
2047
  onFailure: (cause) => mergeDecision.Done(Effect.failCause(cause)),
2106
2048
  onSuccess: (leftZ) =>
2107
- mergeDecision.Await<R | R2, E2, Z2, E | E2, Z3>(
2049
+ mergeDecision.Await<R | R2, E2, A2, E | E2, A3>(
2108
2050
  Exit.match({
2109
2051
  onFailure: Effect.failCause,
2110
2052
  onSuccess: (rightZ) => Effect.succeed(f(leftZ, rightZ))
@@ -2114,7 +2056,7 @@ export const zipWith = dual<
2114
2056
  onOtherDone: Exit.match({
2115
2057
  onFailure: (cause) => mergeDecision.Done(Effect.failCause(cause)),
2116
2058
  onSuccess: (rightZ) =>
2117
- mergeDecision.Await<R | R2, E, Z, E | E2, Z3>(
2059
+ mergeDecision.Await<R | R2, E, A, E | E2, A3>(
2118
2060
  Exit.match({
2119
2061
  onFailure: Effect.failCause,
2120
2062
  onSuccess: (leftZ) => Effect.succeed(f(leftZ, rightZ))
@@ -2128,20 +2070,20 @@ export const zipWith = dual<
2128
2070
  // Circular with Channel
2129
2071
 
2130
2072
  /** @internal */
2131
- export const channelToSink = <Env, InErr, InElem, OutErr, OutElem, OutDone>(
2132
- self: Channel.Channel<Env, InErr, Chunk.Chunk<InElem>, unknown, OutErr, Chunk.Chunk<OutElem>, OutDone>
2133
- ): Sink.Sink<Env, OutErr, InElem, OutElem, OutDone> => new SinkImpl(self)
2073
+ export const channelToSink = <OutElem, InElem, OutErr, InErr, OutDone, Env>(
2074
+ self: Channel.Channel<Chunk.Chunk<OutElem>, Chunk.Chunk<InElem>, OutErr, InErr, OutDone, unknown, Env>
2075
+ ): Sink.Sink<OutDone, InElem, OutElem, OutErr, Env> => new SinkImpl(self)
2134
2076
 
2135
2077
  // Constants
2136
2078
 
2137
2079
  /** @internal */
2138
- export const count: Sink.Sink<never, never, unknown, never, number> = foldLeftChunks(
2080
+ export const count: Sink.Sink<number, unknown> = foldLeftChunks(
2139
2081
  0,
2140
2082
  (acc, chunk) => acc + chunk.length
2141
2083
  )
2142
2084
 
2143
2085
  /** @internal */
2144
- export const mkString: Sink.Sink<never, never, unknown, never, string> = suspend(() => {
2086
+ export const mkString: Sink.Sink<string, unknown> = suspend(() => {
2145
2087
  const strings: Array<string> = []
2146
2088
  return pipe(
2147
2089
  foldLeftChunks<void, unknown>(void 0, (_, elems) =>
@@ -2153,7 +2095,7 @@ export const mkString: Sink.Sink<never, never, unknown, never, string> = suspend
2153
2095
  })
2154
2096
 
2155
2097
  /** @internal */
2156
- export const timed: Sink.Sink<never, never, unknown, never, Duration.Duration> = pipe(
2098
+ export const timed: Sink.Sink<Duration.Duration, unknown> = pipe(
2157
2099
  withDuration(drain),
2158
2100
  map((tuple) => tuple[1])
2159
2101
  )