effect 2.0.0-next.55 → 2.0.0-next.57

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 (1063) hide show
  1. package/README.md +14 -9
  2. package/dist/cjs/BigDecimal.js +9 -9
  3. package/dist/cjs/BigDecimal.js.map +1 -1
  4. package/dist/cjs/BigInt.js.map +1 -1
  5. package/dist/cjs/Boolean.js.map +1 -1
  6. package/dist/cjs/Brand.js.map +1 -1
  7. package/dist/cjs/Cache.js.map +1 -1
  8. package/dist/cjs/Cause.js +53 -18
  9. package/dist/cjs/Cause.js.map +1 -1
  10. package/dist/cjs/Channel.js.map +1 -1
  11. package/dist/cjs/ChildExecutorDecision.js.map +1 -1
  12. package/dist/cjs/Chunk.js +43 -34
  13. package/dist/cjs/Chunk.js.map +1 -1
  14. package/dist/cjs/Config.js +3 -3
  15. package/dist/cjs/Config.js.map +1 -1
  16. package/dist/cjs/Context.js.map +1 -1
  17. package/dist/cjs/Data.js +11 -20
  18. package/dist/cjs/Data.js.map +1 -1
  19. package/dist/cjs/Deferred.js.map +1 -1
  20. package/dist/cjs/Differ.js.map +1 -1
  21. package/dist/cjs/Duration.js +49 -2
  22. package/dist/cjs/Duration.js.map +1 -1
  23. package/dist/cjs/Effect.js +10 -8
  24. package/dist/cjs/Effect.js.map +1 -1
  25. package/dist/cjs/Either.js +44 -8
  26. package/dist/cjs/Either.js.map +1 -1
  27. package/dist/cjs/Equal.js.map +1 -1
  28. package/dist/cjs/Equivalence.js +1 -1
  29. package/dist/cjs/Equivalence.js.map +1 -1
  30. package/dist/cjs/Exit.js.map +1 -1
  31. package/dist/cjs/Fiber.js.map +1 -1
  32. package/dist/cjs/FiberRef.js +6 -1
  33. package/dist/cjs/FiberRef.js.map +1 -1
  34. package/dist/cjs/Function.js.map +1 -1
  35. package/dist/cjs/GlobalValue.js.map +1 -1
  36. package/dist/cjs/GroupBy.js.map +1 -1
  37. package/dist/cjs/Hash.js.map +1 -1
  38. package/dist/cjs/HashMap.js.map +1 -1
  39. package/dist/cjs/Inspectable.js +4 -6
  40. package/dist/cjs/Inspectable.js.map +1 -1
  41. package/dist/cjs/KeyedPool.js.map +1 -1
  42. package/dist/cjs/Layer.js +9 -29
  43. package/dist/cjs/Layer.js.map +1 -1
  44. package/dist/cjs/List.js +25 -22
  45. package/dist/cjs/List.js.map +1 -1
  46. package/dist/cjs/LogLevel.js.map +1 -1
  47. package/dist/cjs/Logger.js.map +1 -1
  48. package/dist/cjs/Match.js.map +1 -1
  49. package/dist/cjs/MergeDecision.js.map +1 -1
  50. package/dist/cjs/MergeState.js.map +1 -1
  51. package/dist/cjs/Metric.js.map +1 -1
  52. package/dist/cjs/MetricHook.js.map +1 -1
  53. package/dist/cjs/MetricKey.js.map +1 -1
  54. package/dist/cjs/MetricKeyType.js.map +1 -1
  55. package/dist/cjs/MetricPair.js.map +1 -1
  56. package/dist/cjs/MetricPolling.js +2 -2
  57. package/dist/cjs/MetricPolling.js.map +1 -1
  58. package/dist/cjs/MetricState.js.map +1 -1
  59. package/dist/cjs/MutableHashMap.js +1 -1
  60. package/dist/cjs/MutableHashMap.js.map +1 -1
  61. package/dist/cjs/MutableHashSet.js +1 -1
  62. package/dist/cjs/MutableHashSet.js.map +1 -1
  63. package/dist/cjs/MutableList.js +1 -1
  64. package/dist/cjs/MutableList.js.map +1 -1
  65. package/dist/cjs/MutableQueue.js +1 -1
  66. package/dist/cjs/MutableQueue.js.map +1 -1
  67. package/dist/cjs/MutableRef.js +1 -1
  68. package/dist/cjs/MutableRef.js.map +1 -1
  69. package/dist/cjs/NonEmptyIterable.js.map +1 -1
  70. package/dist/cjs/Number.js.map +1 -1
  71. package/dist/cjs/Option.js +21 -14
  72. package/dist/cjs/Option.js.map +1 -1
  73. package/dist/cjs/Order.js +1 -1
  74. package/dist/cjs/Order.js.map +1 -1
  75. package/dist/cjs/Ordering.js.map +1 -1
  76. package/dist/cjs/Pipeable.js.map +1 -1
  77. package/dist/cjs/Pool.js +15 -17
  78. package/dist/cjs/Pool.js.map +1 -1
  79. package/dist/cjs/Predicate.js +17 -1
  80. package/dist/cjs/Predicate.js.map +1 -1
  81. package/dist/cjs/PrimaryKey.js +21 -0
  82. package/dist/cjs/PrimaryKey.js.map +1 -0
  83. package/dist/cjs/Queue.js +6 -1
  84. package/dist/cjs/Queue.js.map +1 -1
  85. package/dist/cjs/ReadonlyArray.js +202 -187
  86. package/dist/cjs/ReadonlyArray.js.map +1 -1
  87. package/dist/cjs/ReadonlyRecord.js +61 -8
  88. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  89. package/dist/cjs/RedBlackTree.js.map +1 -1
  90. package/dist/cjs/Ref.js.map +1 -1
  91. package/dist/cjs/Reloadable.js.map +1 -1
  92. package/dist/cjs/Request.js +42 -1
  93. package/dist/cjs/Request.js.map +1 -1
  94. package/dist/cjs/RequestBlock.js +5 -24
  95. package/dist/cjs/RequestBlock.js.map +1 -1
  96. package/dist/cjs/RequestResolver.js.map +1 -1
  97. package/dist/cjs/Resource.js.map +1 -1
  98. package/dist/cjs/STM.js +1 -1
  99. package/dist/cjs/STM.js.map +1 -1
  100. package/dist/cjs/Schedule.js.map +1 -1
  101. package/dist/cjs/Scheduler.js.map +1 -1
  102. package/dist/cjs/ScopedCache.js.map +1 -1
  103. package/dist/cjs/ScopedRef.js.map +1 -1
  104. package/dist/cjs/Sink.js.map +1 -1
  105. package/dist/cjs/SortedMap.js +5 -2
  106. package/dist/cjs/SortedMap.js.map +1 -1
  107. package/dist/cjs/SortedSet.js +3 -3
  108. package/dist/cjs/SortedSet.js.map +1 -1
  109. package/dist/cjs/Stream.js.map +1 -1
  110. package/dist/cjs/Streamable.js +3 -0
  111. package/dist/cjs/Streamable.js.map +1 -1
  112. package/dist/cjs/String.js.map +1 -1
  113. package/dist/cjs/Struct.js.map +1 -1
  114. package/dist/cjs/SubscriptionRef.js.map +1 -1
  115. package/dist/cjs/Supervisor.js.map +1 -1
  116. package/dist/cjs/SynchronizedRef.js.map +1 -1
  117. package/dist/cjs/TArray.js.map +1 -1
  118. package/dist/cjs/TDeferred.js.map +1 -1
  119. package/dist/cjs/TMap.js.map +1 -1
  120. package/dist/cjs/TPriorityQueue.js.map +1 -1
  121. package/dist/cjs/TPubSub.js.map +1 -1
  122. package/dist/cjs/TQueue.js.map +1 -1
  123. package/dist/cjs/TRef.js.map +1 -1
  124. package/dist/cjs/TSet.js.map +1 -1
  125. package/dist/cjs/Take.js.map +1 -1
  126. package/dist/cjs/TestAnnotation.js +3 -1
  127. package/dist/cjs/TestAnnotation.js.map +1 -1
  128. package/dist/cjs/TestAnnotationMap.js.map +1 -1
  129. package/dist/cjs/TestAnnotations.js.map +1 -1
  130. package/dist/cjs/TestClock.js.map +1 -1
  131. package/dist/cjs/TestContext.js +2 -2
  132. package/dist/cjs/TestContext.js.map +1 -1
  133. package/dist/cjs/UpstreamPullRequest.js.map +1 -1
  134. package/dist/cjs/UpstreamPullStrategy.js.map +1 -1
  135. package/dist/cjs/Utils.js.map +1 -1
  136. package/dist/cjs/index.js +4 -2
  137. package/dist/cjs/index.js.map +1 -1
  138. package/dist/cjs/internal/Iterable.js.map +1 -1
  139. package/dist/cjs/internal/blockedRequests.js +3 -2
  140. package/dist/cjs/internal/blockedRequests.js.map +1 -1
  141. package/dist/cjs/internal/cache.js +3 -0
  142. package/dist/cjs/internal/cache.js.map +1 -1
  143. package/dist/cjs/internal/cause.js +5 -104
  144. package/dist/cjs/internal/cause.js.map +1 -1
  145. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  146. package/dist/cjs/internal/channel/channelState.js +2 -1
  147. package/dist/cjs/internal/channel/channelState.js.map +1 -1
  148. package/dist/cjs/internal/channel/childExecutorDecision.js.map +1 -1
  149. package/dist/cjs/internal/channel/continuation.js +9 -1
  150. package/dist/cjs/internal/channel/continuation.js.map +1 -1
  151. package/dist/cjs/internal/channel/mergeDecision.js.map +1 -1
  152. package/dist/cjs/internal/channel/mergeState.js.map +1 -1
  153. package/dist/cjs/internal/channel/mergeStrategy.js.map +1 -1
  154. package/dist/cjs/internal/channel/singleProducerAsyncInput.js.map +1 -1
  155. package/dist/cjs/internal/channel/subexecutor.js.map +1 -1
  156. package/dist/cjs/internal/channel/upstreamPullRequest.js +1 -1
  157. package/dist/cjs/internal/channel/upstreamPullRequest.js.map +1 -1
  158. package/dist/cjs/internal/channel/upstreamPullStrategy.js +1 -1
  159. package/dist/cjs/internal/channel/upstreamPullStrategy.js.map +1 -1
  160. package/dist/cjs/internal/channel.js.map +1 -1
  161. package/dist/cjs/internal/clock.js.map +1 -1
  162. package/dist/cjs/internal/concurrency.js.map +1 -1
  163. package/dist/cjs/internal/config.js +16 -24
  164. package/dist/cjs/internal/config.js.map +1 -1
  165. package/dist/cjs/internal/configError.js +2 -2
  166. package/dist/cjs/internal/configError.js.map +1 -1
  167. package/dist/cjs/internal/configProvider/pathPatch.js.map +1 -1
  168. package/dist/cjs/internal/configProvider.js +18 -4
  169. package/dist/cjs/internal/configProvider.js.map +1 -1
  170. package/dist/cjs/internal/configSecret.js.map +1 -1
  171. package/dist/cjs/internal/context.js +5 -5
  172. package/dist/cjs/internal/context.js.map +1 -1
  173. package/dist/cjs/internal/core-effect.js +19 -15
  174. package/dist/cjs/internal/core-effect.js.map +1 -1
  175. package/dist/cjs/internal/core-stream.js +7 -1
  176. package/dist/cjs/internal/core-stream.js.map +1 -1
  177. package/dist/cjs/internal/core.js +203 -85
  178. package/dist/cjs/internal/core.js.map +1 -1
  179. package/dist/cjs/internal/data.js +4 -22
  180. package/dist/cjs/internal/data.js.map +1 -1
  181. package/dist/cjs/internal/dataSource.js +1 -1
  182. package/dist/cjs/internal/dataSource.js.map +1 -1
  183. package/dist/cjs/internal/deferred.js +2 -0
  184. package/dist/cjs/internal/deferred.js.map +1 -1
  185. package/dist/cjs/internal/differ/chunkPatch.js.map +1 -1
  186. package/dist/cjs/internal/differ/contextPatch.js.map +1 -1
  187. package/dist/cjs/internal/differ/hashMapPatch.js.map +1 -1
  188. package/dist/cjs/internal/differ/hashSetPatch.js.map +1 -1
  189. package/dist/cjs/internal/differ/orPatch.js.map +1 -1
  190. package/dist/cjs/internal/differ.js.map +1 -1
  191. package/dist/cjs/internal/effect/circular.js +1 -0
  192. package/dist/cjs/internal/effect/circular.js.map +1 -1
  193. package/dist/cjs/internal/effectable.js +38 -7
  194. package/dist/cjs/internal/effectable.js.map +1 -1
  195. package/dist/cjs/internal/either.js +1 -1
  196. package/dist/cjs/internal/either.js.map +1 -1
  197. package/dist/cjs/internal/encoding/base64.js.map +1 -1
  198. package/dist/cjs/internal/encoding/base64Url.js.map +1 -1
  199. package/dist/cjs/internal/encoding/common.js.map +1 -1
  200. package/dist/cjs/internal/encoding/hex.js.map +1 -1
  201. package/dist/cjs/internal/executionStrategy.js.map +1 -1
  202. package/dist/cjs/internal/fiber.js +2 -0
  203. package/dist/cjs/internal/fiber.js.map +1 -1
  204. package/dist/cjs/internal/fiberId.js +3 -3
  205. package/dist/cjs/internal/fiberId.js.map +1 -1
  206. package/dist/cjs/internal/fiberMessage.js.map +1 -1
  207. package/dist/cjs/internal/fiberRefs/patch.js.map +1 -1
  208. package/dist/cjs/internal/fiberRefs.js.map +1 -1
  209. package/dist/cjs/internal/fiberRuntime.js +181 -218
  210. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  211. package/dist/cjs/internal/groupBy.js +4 -1
  212. package/dist/cjs/internal/groupBy.js.map +1 -1
  213. package/dist/cjs/internal/hashMap/array.js.map +1 -1
  214. package/dist/cjs/internal/hashMap/node.js.map +1 -1
  215. package/dist/cjs/internal/hashMap.js +2 -2
  216. package/dist/cjs/internal/hashMap.js.map +1 -1
  217. package/dist/cjs/internal/hashSet.js +3 -3
  218. package/dist/cjs/internal/hashSet.js.map +1 -1
  219. package/dist/cjs/internal/keyedPool.js +3 -0
  220. package/dist/cjs/internal/keyedPool.js.map +1 -1
  221. package/dist/cjs/internal/layer.js +23 -53
  222. package/dist/cjs/internal/layer.js.map +1 -1
  223. package/dist/cjs/internal/logger.js +2 -1
  224. package/dist/cjs/internal/logger.js.map +1 -1
  225. package/dist/cjs/internal/matcher.js.map +1 -1
  226. package/dist/cjs/internal/metric/hook.js +2 -1
  227. package/dist/cjs/internal/metric/hook.js.map +1 -1
  228. package/dist/cjs/internal/metric/key.js +1 -1
  229. package/dist/cjs/internal/metric/key.js.map +1 -1
  230. package/dist/cjs/internal/metric/keyType.js +2 -1
  231. package/dist/cjs/internal/metric/keyType.js.map +1 -1
  232. package/dist/cjs/internal/metric/pair.js +1 -1
  233. package/dist/cjs/internal/metric/pair.js.map +1 -1
  234. package/dist/cjs/internal/metric/polling.js +7 -7
  235. package/dist/cjs/internal/metric/polling.js.map +1 -1
  236. package/dist/cjs/internal/metric/registry.js.map +1 -1
  237. package/dist/cjs/internal/metric/state.js +1 -1
  238. package/dist/cjs/internal/metric/state.js.map +1 -1
  239. package/dist/cjs/internal/metric.js +11 -5
  240. package/dist/cjs/internal/metric.js.map +1 -1
  241. package/dist/cjs/internal/opCodes/layer.js +4 -4
  242. package/dist/cjs/internal/opCodes/layer.js.map +1 -1
  243. package/dist/cjs/internal/option.js +1 -1
  244. package/dist/cjs/internal/option.js.map +1 -1
  245. package/dist/cjs/internal/pool.js +2 -0
  246. package/dist/cjs/internal/pool.js.map +1 -1
  247. package/dist/cjs/internal/pubsub.js +25 -24
  248. package/dist/cjs/internal/pubsub.js.map +1 -1
  249. package/dist/cjs/internal/query.js +1 -1
  250. package/dist/cjs/internal/query.js.map +1 -1
  251. package/dist/cjs/internal/queue.js +14 -3
  252. package/dist/cjs/internal/queue.js.map +1 -1
  253. package/dist/cjs/internal/random.js.map +1 -1
  254. package/dist/cjs/internal/redBlackTree/iterator.js.map +1 -1
  255. package/dist/cjs/internal/redBlackTree.js +8 -2
  256. package/dist/cjs/internal/redBlackTree.js.map +1 -1
  257. package/dist/cjs/internal/ref.js +1 -0
  258. package/dist/cjs/internal/ref.js.map +1 -1
  259. package/dist/cjs/internal/reloadable.js +1 -1
  260. package/dist/cjs/internal/reloadable.js.map +1 -1
  261. package/dist/cjs/internal/request.js +33 -16
  262. package/dist/cjs/internal/request.js.map +1 -1
  263. package/dist/cjs/internal/resource.js +4 -3
  264. package/dist/cjs/internal/resource.js.map +1 -1
  265. package/dist/cjs/internal/ringBuffer.js.map +1 -1
  266. package/dist/cjs/internal/runtime.js +3 -4
  267. package/dist/cjs/internal/runtime.js.map +1 -1
  268. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  269. package/dist/cjs/internal/schedule/interval.js.map +1 -1
  270. package/dist/cjs/internal/schedule/intervals.js.map +1 -1
  271. package/dist/cjs/internal/schedule.js +12 -8
  272. package/dist/cjs/internal/schedule.js.map +1 -1
  273. package/dist/cjs/internal/scopedCache.js +5 -2
  274. package/dist/cjs/internal/scopedCache.js.map +1 -1
  275. package/dist/cjs/internal/scopedRef.js +1 -0
  276. package/dist/cjs/internal/scopedRef.js.map +1 -1
  277. package/dist/cjs/internal/sink.js +6 -2
  278. package/dist/cjs/internal/sink.js.map +1 -1
  279. package/dist/cjs/internal/stm/core.js +5 -3
  280. package/dist/cjs/internal/stm/core.js.map +1 -1
  281. package/dist/cjs/internal/stm/stm/journal.js.map +1 -1
  282. package/dist/cjs/internal/stm/stm/stmState.js.map +1 -1
  283. package/dist/cjs/internal/stm/stm/tExit.js +2 -1
  284. package/dist/cjs/internal/stm/stm/tExit.js.map +1 -1
  285. package/dist/cjs/internal/stm/stm.js.map +1 -1
  286. package/dist/cjs/internal/stm/tArray.js +1 -1
  287. package/dist/cjs/internal/stm/tArray.js.map +1 -1
  288. package/dist/cjs/internal/stm/tDeferred.js.map +1 -1
  289. package/dist/cjs/internal/stm/tMap.js +2 -1
  290. package/dist/cjs/internal/stm/tMap.js.map +1 -1
  291. package/dist/cjs/internal/stm/tPriorityQueue.js +1 -1
  292. package/dist/cjs/internal/stm/tPriorityQueue.js.map +1 -1
  293. package/dist/cjs/internal/stm/tPubSub.js +17 -14
  294. package/dist/cjs/internal/stm/tPubSub.js.map +1 -1
  295. package/dist/cjs/internal/stm/tQueue.js +8 -7
  296. package/dist/cjs/internal/stm/tQueue.js.map +1 -1
  297. package/dist/cjs/internal/stm/tRandom.js.map +1 -1
  298. package/dist/cjs/internal/stm/tReentrantLock.js.map +1 -1
  299. package/dist/cjs/internal/stm/tRef.js +1 -1
  300. package/dist/cjs/internal/stm/tRef.js.map +1 -1
  301. package/dist/cjs/internal/stm/tSemaphore.js +2 -2
  302. package/dist/cjs/internal/stm/tSemaphore.js.map +1 -1
  303. package/dist/cjs/internal/stm/tSet.js +1 -1
  304. package/dist/cjs/internal/stm/tSet.js.map +1 -1
  305. package/dist/cjs/internal/stream/haltStrategy.js.map +1 -1
  306. package/dist/cjs/internal/stream/handoff.js +1 -1
  307. package/dist/cjs/internal/stream/handoff.js.map +1 -1
  308. package/dist/cjs/internal/stream.js +5 -5
  309. package/dist/cjs/internal/stream.js.map +1 -1
  310. package/dist/cjs/internal/string-utils.js.map +1 -1
  311. package/dist/cjs/internal/subscriptionRef.js +1 -1
  312. package/dist/cjs/internal/subscriptionRef.js.map +1 -1
  313. package/dist/cjs/internal/supervisor/patch.js.map +1 -1
  314. package/dist/cjs/internal/supervisor.js +1 -0
  315. package/dist/cjs/internal/supervisor.js.map +1 -1
  316. package/dist/cjs/internal/synchronizedRef.js.map +1 -1
  317. package/dist/cjs/internal/take.js +3 -2
  318. package/dist/cjs/internal/take.js.map +1 -1
  319. package/dist/cjs/internal/version.js +1 -1
  320. package/dist/dts/BigDecimal.d.ts +5 -5
  321. package/dist/dts/BigDecimal.d.ts.map +1 -1
  322. package/dist/dts/Brand.d.ts +4 -4
  323. package/dist/dts/Brand.d.ts.map +1 -1
  324. package/dist/dts/Cache.d.ts +18 -16
  325. package/dist/dts/Cache.d.ts.map +1 -1
  326. package/dist/dts/Cause.d.ts +94 -26
  327. package/dist/dts/Cause.d.ts.map +1 -1
  328. package/dist/dts/Channel.d.ts +12 -11
  329. package/dist/dts/Channel.d.ts.map +1 -1
  330. package/dist/dts/ChildExecutorDecision.d.ts.map +1 -1
  331. package/dist/dts/Chunk.d.ts +81 -69
  332. package/dist/dts/Chunk.d.ts.map +1 -1
  333. package/dist/dts/Clock.d.ts +4 -4
  334. package/dist/dts/Clock.d.ts.map +1 -1
  335. package/dist/dts/Config.d.ts +20 -19
  336. package/dist/dts/Config.d.ts.map +1 -1
  337. package/dist/dts/ConfigError.d.ts +7 -7
  338. package/dist/dts/ConfigError.d.ts.map +1 -1
  339. package/dist/dts/ConfigProvider.d.ts +3 -3
  340. package/dist/dts/ConfigProvider.d.ts.map +1 -1
  341. package/dist/dts/ConfigProviderPathPatch.d.ts +1 -1
  342. package/dist/dts/ConfigProviderPathPatch.d.ts.map +1 -1
  343. package/dist/dts/Console.d.ts +36 -36
  344. package/dist/dts/Console.d.ts.map +1 -1
  345. package/dist/dts/Context.d.ts +8 -7
  346. package/dist/dts/Context.d.ts.map +1 -1
  347. package/dist/dts/Data.d.ts +6 -20
  348. package/dist/dts/Data.d.ts.map +1 -1
  349. package/dist/dts/Deferred.d.ts +5 -4
  350. package/dist/dts/Deferred.d.ts.map +1 -1
  351. package/dist/dts/Differ.d.ts +24 -23
  352. package/dist/dts/Differ.d.ts.map +1 -1
  353. package/dist/dts/Duration.d.ts +12 -1
  354. package/dist/dts/Duration.d.ts.map +1 -1
  355. package/dist/dts/Effect.d.ts +62 -45
  356. package/dist/dts/Effect.d.ts.map +1 -1
  357. package/dist/dts/Either.d.ts +61 -13
  358. package/dist/dts/Either.d.ts.map +1 -1
  359. package/dist/dts/Equal.d.ts +1 -1
  360. package/dist/dts/Equal.d.ts.map +1 -1
  361. package/dist/dts/Equivalence.d.ts +2 -2
  362. package/dist/dts/Equivalence.d.ts.map +1 -1
  363. package/dist/dts/Exit.d.ts +5 -3
  364. package/dist/dts/Exit.d.ts.map +1 -1
  365. package/dist/dts/Fiber.d.ts +17 -16
  366. package/dist/dts/Fiber.d.ts.map +1 -1
  367. package/dist/dts/FiberRef.d.ts +9 -3
  368. package/dist/dts/FiberRef.d.ts.map +1 -1
  369. package/dist/dts/GroupBy.d.ts +7 -6
  370. package/dist/dts/GroupBy.d.ts.map +1 -1
  371. package/dist/dts/HKT.d.ts +5 -4
  372. package/dist/dts/HKT.d.ts.map +1 -1
  373. package/dist/dts/Hash.d.ts +1 -1
  374. package/dist/dts/Hash.d.ts.map +1 -1
  375. package/dist/dts/HashMap.d.ts +6 -4
  376. package/dist/dts/HashMap.d.ts.map +1 -1
  377. package/dist/dts/HashSet.d.ts +9 -9
  378. package/dist/dts/HashSet.d.ts.map +1 -1
  379. package/dist/dts/Inspectable.d.ts +3 -7
  380. package/dist/dts/Inspectable.d.ts.map +1 -1
  381. package/dist/dts/KeyedPool.d.ts +8 -7
  382. package/dist/dts/KeyedPool.d.ts.map +1 -1
  383. package/dist/dts/Layer.d.ts +16 -41
  384. package/dist/dts/Layer.d.ts.map +1 -1
  385. package/dist/dts/List.d.ts +48 -49
  386. package/dist/dts/List.d.ts.map +1 -1
  387. package/dist/dts/Logger.d.ts +7 -6
  388. package/dist/dts/Logger.d.ts.map +1 -1
  389. package/dist/dts/Match.d.ts +31 -19
  390. package/dist/dts/Match.d.ts.map +1 -1
  391. package/dist/dts/MergeDecision.d.ts +8 -7
  392. package/dist/dts/MergeDecision.d.ts.map +1 -1
  393. package/dist/dts/MergeState.d.ts +5 -5
  394. package/dist/dts/MergeState.d.ts.map +1 -1
  395. package/dist/dts/Metric.d.ts +11 -10
  396. package/dist/dts/Metric.d.ts.map +1 -1
  397. package/dist/dts/MetricHook.d.ts +7 -6
  398. package/dist/dts/MetricHook.d.ts.map +1 -1
  399. package/dist/dts/MetricKey.d.ts +4 -3
  400. package/dist/dts/MetricKey.d.ts.map +1 -1
  401. package/dist/dts/MetricKeyType.d.ts +5 -4
  402. package/dist/dts/MetricKeyType.d.ts.map +1 -1
  403. package/dist/dts/MetricPair.d.ts +4 -3
  404. package/dist/dts/MetricPair.d.ts.map +1 -1
  405. package/dist/dts/MetricPolling.d.ts +16 -16
  406. package/dist/dts/MetricPolling.d.ts.map +1 -1
  407. package/dist/dts/MetricRegistry.d.ts +7 -7
  408. package/dist/dts/MetricRegistry.d.ts.map +1 -1
  409. package/dist/dts/MetricState.d.ts +6 -5
  410. package/dist/dts/MetricState.d.ts.map +1 -1
  411. package/dist/dts/MutableHashMap.d.ts +1 -1
  412. package/dist/dts/MutableHashMap.d.ts.map +1 -1
  413. package/dist/dts/MutableHashSet.d.ts +1 -1
  414. package/dist/dts/MutableHashSet.d.ts.map +1 -1
  415. package/dist/dts/MutableList.d.ts +1 -1
  416. package/dist/dts/MutableList.d.ts.map +1 -1
  417. package/dist/dts/MutableQueue.d.ts +1 -1
  418. package/dist/dts/MutableQueue.d.ts.map +1 -1
  419. package/dist/dts/MutableRef.d.ts +1 -1
  420. package/dist/dts/MutableRef.d.ts.map +1 -1
  421. package/dist/dts/NonEmptyIterable.d.ts +2 -2
  422. package/dist/dts/NonEmptyIterable.d.ts.map +1 -1
  423. package/dist/dts/Option.d.ts +39 -24
  424. package/dist/dts/Option.d.ts.map +1 -1
  425. package/dist/dts/Order.d.ts +2 -2
  426. package/dist/dts/Order.d.ts.map +1 -1
  427. package/dist/dts/Pipeable.d.ts +21 -23
  428. package/dist/dts/Pipeable.d.ts.map +1 -1
  429. package/dist/dts/Pool.d.ts +21 -22
  430. package/dist/dts/Pool.d.ts.map +1 -1
  431. package/dist/dts/Predicate.d.ts +17 -2
  432. package/dist/dts/Predicate.d.ts.map +1 -1
  433. package/dist/dts/PrimaryKey.d.ts +21 -0
  434. package/dist/dts/PrimaryKey.d.ts.map +1 -0
  435. package/dist/dts/PubSub.d.ts +3 -3
  436. package/dist/dts/PubSub.d.ts.map +1 -1
  437. package/dist/dts/Queue.d.ts +49 -29
  438. package/dist/dts/Queue.d.ts.map +1 -1
  439. package/dist/dts/Random.d.ts +3 -3
  440. package/dist/dts/Random.d.ts.map +1 -1
  441. package/dist/dts/ReadonlyArray.d.ts +170 -206
  442. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  443. package/dist/dts/ReadonlyRecord.d.ts +51 -16
  444. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  445. package/dist/dts/RedBlackTree.d.ts +6 -2
  446. package/dist/dts/RedBlackTree.d.ts.map +1 -1
  447. package/dist/dts/Ref.d.ts +5 -4
  448. package/dist/dts/Ref.d.ts.map +1 -1
  449. package/dist/dts/Reloadable.d.ts +4 -3
  450. package/dist/dts/Reloadable.d.ts.map +1 -1
  451. package/dist/dts/Request.d.ts +63 -11
  452. package/dist/dts/Request.d.ts.map +1 -1
  453. package/dist/dts/RequestBlock.d.ts +20 -39
  454. package/dist/dts/RequestBlock.d.ts.map +1 -1
  455. package/dist/dts/RequestResolver.d.ts +7 -6
  456. package/dist/dts/RequestResolver.d.ts.map +1 -1
  457. package/dist/dts/Resource.d.ts +5 -4
  458. package/dist/dts/Resource.d.ts.map +1 -1
  459. package/dist/dts/Runtime.d.ts +3 -3
  460. package/dist/dts/Runtime.d.ts.map +1 -1
  461. package/dist/dts/STM.d.ts +13 -12
  462. package/dist/dts/STM.d.ts.map +1 -1
  463. package/dist/dts/Schedule.d.ts +13 -12
  464. package/dist/dts/Schedule.d.ts.map +1 -1
  465. package/dist/dts/Scheduler.d.ts +3 -3
  466. package/dist/dts/Scheduler.d.ts.map +1 -1
  467. package/dist/dts/ScopedCache.d.ts +13 -12
  468. package/dist/dts/ScopedCache.d.ts.map +1 -1
  469. package/dist/dts/ScopedRef.d.ts +4 -3
  470. package/dist/dts/ScopedRef.d.ts.map +1 -1
  471. package/dist/dts/SingleProducerAsyncInput.d.ts +7 -7
  472. package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -1
  473. package/dist/dts/Sink.d.ts +13 -9
  474. package/dist/dts/Sink.d.ts.map +1 -1
  475. package/dist/dts/SortedMap.d.ts +6 -2
  476. package/dist/dts/SortedMap.d.ts.map +1 -1
  477. package/dist/dts/SortedSet.d.ts +7 -12
  478. package/dist/dts/SortedSet.d.ts.map +1 -1
  479. package/dist/dts/Stream.d.ts +32 -23
  480. package/dist/dts/Stream.d.ts.map +1 -1
  481. package/dist/dts/StreamEmit.d.ts +12 -12
  482. package/dist/dts/StreamEmit.d.ts.map +1 -1
  483. package/dist/dts/Streamable.d.ts.map +1 -1
  484. package/dist/dts/SubscriptionRef.d.ts +4 -3
  485. package/dist/dts/SubscriptionRef.d.ts.map +1 -1
  486. package/dist/dts/Supervisor.d.ts +11 -10
  487. package/dist/dts/Supervisor.d.ts.map +1 -1
  488. package/dist/dts/SynchronizedRef.d.ts +5 -4
  489. package/dist/dts/SynchronizedRef.d.ts.map +1 -1
  490. package/dist/dts/TArray.d.ts +4 -3
  491. package/dist/dts/TArray.d.ts.map +1 -1
  492. package/dist/dts/TDeferred.d.ts +5 -4
  493. package/dist/dts/TDeferred.d.ts.map +1 -1
  494. package/dist/dts/TMap.d.ts +5 -4
  495. package/dist/dts/TMap.d.ts.map +1 -1
  496. package/dist/dts/TPriorityQueue.d.ts +4 -3
  497. package/dist/dts/TPriorityQueue.d.ts.map +1 -1
  498. package/dist/dts/TPubSub.d.ts +5 -1
  499. package/dist/dts/TPubSub.d.ts.map +1 -1
  500. package/dist/dts/TQueue.d.ts +12 -11
  501. package/dist/dts/TQueue.d.ts.map +1 -1
  502. package/dist/dts/TRandom.d.ts +3 -3
  503. package/dist/dts/TRandom.d.ts.map +1 -1
  504. package/dist/dts/TRef.d.ts +5 -4
  505. package/dist/dts/TRef.d.ts.map +1 -1
  506. package/dist/dts/TSet.d.ts +4 -3
  507. package/dist/dts/TSet.d.ts.map +1 -1
  508. package/dist/dts/Take.d.ts +5 -4
  509. package/dist/dts/Take.d.ts.map +1 -1
  510. package/dist/dts/TestAnnotation.d.ts +6 -3
  511. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  512. package/dist/dts/TestAnnotations.d.ts +2 -2
  513. package/dist/dts/TestAnnotations.d.ts.map +1 -1
  514. package/dist/dts/TestClock.d.ts +3 -3
  515. package/dist/dts/TestClock.d.ts.map +1 -1
  516. package/dist/dts/TestContext.d.ts.map +1 -1
  517. package/dist/dts/TestLive.d.ts +1 -1
  518. package/dist/dts/TestLive.d.ts.map +1 -1
  519. package/dist/dts/TestSized.d.ts +1 -1
  520. package/dist/dts/TestSized.d.ts.map +1 -1
  521. package/dist/dts/Tracer.d.ts +5 -5
  522. package/dist/dts/Tracer.d.ts.map +1 -1
  523. package/dist/dts/Types.d.ts +28 -0
  524. package/dist/dts/Types.d.ts.map +1 -1
  525. package/dist/dts/UpstreamPullRequest.d.ts +4 -3
  526. package/dist/dts/UpstreamPullRequest.d.ts.map +1 -1
  527. package/dist/dts/UpstreamPullStrategy.d.ts +5 -4
  528. package/dist/dts/UpstreamPullStrategy.d.ts.map +1 -1
  529. package/dist/dts/Utils.d.ts +7 -6
  530. package/dist/dts/Utils.d.ts.map +1 -1
  531. package/dist/dts/index.d.ts +4 -0
  532. package/dist/dts/index.d.ts.map +1 -1
  533. package/dist/dts/internal/config.d.ts +1 -2
  534. package/dist/dts/internal/config.d.ts.map +1 -1
  535. package/dist/dts/internal/core-stream.d.ts.map +1 -1
  536. package/dist/dts/internal/fiberScope.d.ts +1 -1
  537. package/dist/dts/internal/fiberScope.d.ts.map +1 -1
  538. package/dist/dts/internal/logger.d.ts.map +1 -1
  539. package/dist/dts/internal/metric/keyType.d.ts.map +1 -1
  540. package/dist/dts/internal/stream/handoffSignal.d.ts +1 -1
  541. package/dist/dts/internal/stream/handoffSignal.d.ts.map +1 -1
  542. package/dist/dts/internal/version.d.ts +1 -1
  543. package/dist/esm/BigDecimal.js +7 -7
  544. package/dist/esm/BigDecimal.js.map +1 -1
  545. package/dist/esm/BigInt.js.map +1 -1
  546. package/dist/esm/Boolean.js.map +1 -1
  547. package/dist/esm/Brand.js.map +1 -1
  548. package/dist/esm/Cache.js.map +1 -1
  549. package/dist/esm/Cause.js +52 -17
  550. package/dist/esm/Cause.js.map +1 -1
  551. package/dist/esm/Channel.js.map +1 -1
  552. package/dist/esm/ChildExecutorDecision.js.map +1 -1
  553. package/dist/esm/Chunk.js +43 -34
  554. package/dist/esm/Chunk.js.map +1 -1
  555. package/dist/esm/Config.js +3 -3
  556. package/dist/esm/Config.js.map +1 -1
  557. package/dist/esm/Context.js.map +1 -1
  558. package/dist/esm/Data.js +10 -19
  559. package/dist/esm/Data.js.map +1 -1
  560. package/dist/esm/Deferred.js.map +1 -1
  561. package/dist/esm/Differ.js.map +1 -1
  562. package/dist/esm/Duration.js +48 -2
  563. package/dist/esm/Duration.js.map +1 -1
  564. package/dist/esm/Effect.js +9 -7
  565. package/dist/esm/Effect.js.map +1 -1
  566. package/dist/esm/Either.js +43 -7
  567. package/dist/esm/Either.js.map +1 -1
  568. package/dist/esm/Equal.js.map +1 -1
  569. package/dist/esm/Equivalence.js +1 -1
  570. package/dist/esm/Equivalence.js.map +1 -1
  571. package/dist/esm/Exit.js.map +1 -1
  572. package/dist/esm/Fiber.js.map +1 -1
  573. package/dist/esm/FiberRef.js +5 -0
  574. package/dist/esm/FiberRef.js.map +1 -1
  575. package/dist/esm/Function.js.map +1 -1
  576. package/dist/esm/GlobalValue.js.map +1 -1
  577. package/dist/esm/GroupBy.js.map +1 -1
  578. package/dist/esm/HKT.js +0 -3
  579. package/dist/esm/HKT.js.map +1 -1
  580. package/dist/esm/Hash.js.map +1 -1
  581. package/dist/esm/HashMap.js.map +1 -1
  582. package/dist/esm/Inspectable.js +2 -4
  583. package/dist/esm/Inspectable.js.map +1 -1
  584. package/dist/esm/KeyedPool.js.map +1 -1
  585. package/dist/esm/Layer.js +8 -28
  586. package/dist/esm/Layer.js.map +1 -1
  587. package/dist/esm/List.js +25 -22
  588. package/dist/esm/List.js.map +1 -1
  589. package/dist/esm/LogLevel.js.map +1 -1
  590. package/dist/esm/Logger.js.map +1 -1
  591. package/dist/esm/Match.js.map +1 -1
  592. package/dist/esm/MergeDecision.js.map +1 -1
  593. package/dist/esm/MergeState.js.map +1 -1
  594. package/dist/esm/Metric.js.map +1 -1
  595. package/dist/esm/MetricHook.js.map +1 -1
  596. package/dist/esm/MetricKey.js.map +1 -1
  597. package/dist/esm/MetricKeyType.js.map +1 -1
  598. package/dist/esm/MetricPair.js.map +1 -1
  599. package/dist/esm/MetricPolling.js +1 -1
  600. package/dist/esm/MetricPolling.js.map +1 -1
  601. package/dist/esm/MetricState.js.map +1 -1
  602. package/dist/esm/MutableHashMap.js +2 -2
  603. package/dist/esm/MutableHashMap.js.map +1 -1
  604. package/dist/esm/MutableHashSet.js +2 -2
  605. package/dist/esm/MutableHashSet.js.map +1 -1
  606. package/dist/esm/MutableList.js +2 -2
  607. package/dist/esm/MutableList.js.map +1 -1
  608. package/dist/esm/MutableQueue.js +2 -2
  609. package/dist/esm/MutableQueue.js.map +1 -1
  610. package/dist/esm/MutableRef.js +2 -2
  611. package/dist/esm/MutableRef.js.map +1 -1
  612. package/dist/esm/NonEmptyIterable.js.map +1 -1
  613. package/dist/esm/Number.js.map +1 -1
  614. package/dist/esm/Option.js +21 -14
  615. package/dist/esm/Option.js.map +1 -1
  616. package/dist/esm/Order.js +1 -1
  617. package/dist/esm/Order.js.map +1 -1
  618. package/dist/esm/Ordering.js.map +1 -1
  619. package/dist/esm/Pipeable.js.map +1 -1
  620. package/dist/esm/Pool.js +15 -17
  621. package/dist/esm/Pool.js.map +1 -1
  622. package/dist/esm/Predicate.js +15 -0
  623. package/dist/esm/Predicate.js.map +1 -1
  624. package/dist/esm/PrimaryKey.js +14 -0
  625. package/dist/esm/PrimaryKey.js.map +1 -0
  626. package/dist/esm/Queue.js +5 -0
  627. package/dist/esm/Queue.js.map +1 -1
  628. package/dist/esm/ReadonlyArray.js +195 -177
  629. package/dist/esm/ReadonlyArray.js.map +1 -1
  630. package/dist/esm/ReadonlyRecord.js +58 -7
  631. package/dist/esm/ReadonlyRecord.js.map +1 -1
  632. package/dist/esm/RedBlackTree.js.map +1 -1
  633. package/dist/esm/Ref.js.map +1 -1
  634. package/dist/esm/Reloadable.js.map +1 -1
  635. package/dist/esm/Request.js +41 -0
  636. package/dist/esm/Request.js.map +1 -1
  637. package/dist/esm/RequestBlock.js +3 -22
  638. package/dist/esm/RequestBlock.js.map +1 -1
  639. package/dist/esm/RequestResolver.js.map +1 -1
  640. package/dist/esm/Resource.js.map +1 -1
  641. package/dist/esm/STM.js +1 -1
  642. package/dist/esm/STM.js.map +1 -1
  643. package/dist/esm/Schedule.js.map +1 -1
  644. package/dist/esm/Scheduler.js.map +1 -1
  645. package/dist/esm/ScopedCache.js.map +1 -1
  646. package/dist/esm/ScopedRef.js.map +1 -1
  647. package/dist/esm/Sink.js.map +1 -1
  648. package/dist/esm/SortedMap.js +6 -3
  649. package/dist/esm/SortedMap.js.map +1 -1
  650. package/dist/esm/SortedSet.js +4 -4
  651. package/dist/esm/SortedSet.js.map +1 -1
  652. package/dist/esm/Stream.js.map +1 -1
  653. package/dist/esm/Streamable.js +3 -0
  654. package/dist/esm/Streamable.js.map +1 -1
  655. package/dist/esm/String.js.map +1 -1
  656. package/dist/esm/Struct.js.map +1 -1
  657. package/dist/esm/SubscriptionRef.js.map +1 -1
  658. package/dist/esm/Supervisor.js.map +1 -1
  659. package/dist/esm/SynchronizedRef.js.map +1 -1
  660. package/dist/esm/TArray.js.map +1 -1
  661. package/dist/esm/TDeferred.js.map +1 -1
  662. package/dist/esm/TMap.js.map +1 -1
  663. package/dist/esm/TPriorityQueue.js.map +1 -1
  664. package/dist/esm/TPubSub.js.map +1 -1
  665. package/dist/esm/TQueue.js.map +1 -1
  666. package/dist/esm/TRef.js.map +1 -1
  667. package/dist/esm/TSet.js.map +1 -1
  668. package/dist/esm/Take.js.map +1 -1
  669. package/dist/esm/TestAnnotation.js +3 -1
  670. package/dist/esm/TestAnnotation.js.map +1 -1
  671. package/dist/esm/TestAnnotationMap.js.map +1 -1
  672. package/dist/esm/TestAnnotations.js.map +1 -1
  673. package/dist/esm/TestClock.js.map +1 -1
  674. package/dist/esm/TestContext.js +2 -2
  675. package/dist/esm/TestContext.js.map +1 -1
  676. package/dist/esm/UpstreamPullRequest.js.map +1 -1
  677. package/dist/esm/UpstreamPullStrategy.js.map +1 -1
  678. package/dist/esm/Utils.js.map +1 -1
  679. package/dist/esm/index.js +4 -0
  680. package/dist/esm/index.js.map +1 -1
  681. package/dist/esm/internal/Iterable.js.map +1 -1
  682. package/dist/esm/internal/blockedRequests.js +3 -2
  683. package/dist/esm/internal/blockedRequests.js.map +1 -1
  684. package/dist/esm/internal/cache.js +3 -0
  685. package/dist/esm/internal/cache.js.map +1 -1
  686. package/dist/esm/internal/cause.js +4 -97
  687. package/dist/esm/internal/cause.js.map +1 -1
  688. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  689. package/dist/esm/internal/channel/channelState.js +2 -1
  690. package/dist/esm/internal/channel/channelState.js.map +1 -1
  691. package/dist/esm/internal/channel/childExecutorDecision.js.map +1 -1
  692. package/dist/esm/internal/channel/continuation.js +9 -1
  693. package/dist/esm/internal/channel/continuation.js.map +1 -1
  694. package/dist/esm/internal/channel/mergeDecision.js.map +1 -1
  695. package/dist/esm/internal/channel/mergeState.js.map +1 -1
  696. package/dist/esm/internal/channel/mergeStrategy.js.map +1 -1
  697. package/dist/esm/internal/channel/singleProducerAsyncInput.js.map +1 -1
  698. package/dist/esm/internal/channel/subexecutor.js.map +1 -1
  699. package/dist/esm/internal/channel/upstreamPullRequest.js +1 -1
  700. package/dist/esm/internal/channel/upstreamPullRequest.js.map +1 -1
  701. package/dist/esm/internal/channel/upstreamPullStrategy.js +1 -1
  702. package/dist/esm/internal/channel/upstreamPullStrategy.js.map +1 -1
  703. package/dist/esm/internal/channel.js.map +1 -1
  704. package/dist/esm/internal/clock.js.map +1 -1
  705. package/dist/esm/internal/concurrency.js.map +1 -1
  706. package/dist/esm/internal/config.js +15 -22
  707. package/dist/esm/internal/config.js.map +1 -1
  708. package/dist/esm/internal/configError.js +2 -2
  709. package/dist/esm/internal/configError.js.map +1 -1
  710. package/dist/esm/internal/configProvider/pathPatch.js.map +1 -1
  711. package/dist/esm/internal/configProvider.js +18 -4
  712. package/dist/esm/internal/configProvider.js.map +1 -1
  713. package/dist/esm/internal/configSecret.js.map +1 -1
  714. package/dist/esm/internal/context.js +6 -6
  715. package/dist/esm/internal/context.js.map +1 -1
  716. package/dist/esm/internal/core-effect.js +19 -15
  717. package/dist/esm/internal/core-effect.js.map +1 -1
  718. package/dist/esm/internal/core-stream.js +7 -1
  719. package/dist/esm/internal/core-stream.js.map +1 -1
  720. package/dist/esm/internal/core.js +196 -84
  721. package/dist/esm/internal/core.js.map +1 -1
  722. package/dist/esm/internal/data.js +3 -21
  723. package/dist/esm/internal/data.js.map +1 -1
  724. package/dist/esm/internal/dataSource.js +1 -1
  725. package/dist/esm/internal/dataSource.js.map +1 -1
  726. package/dist/esm/internal/deferred.js +2 -0
  727. package/dist/esm/internal/deferred.js.map +1 -1
  728. package/dist/esm/internal/differ/chunkPatch.js.map +1 -1
  729. package/dist/esm/internal/differ/contextPatch.js.map +1 -1
  730. package/dist/esm/internal/differ/hashMapPatch.js.map +1 -1
  731. package/dist/esm/internal/differ/hashSetPatch.js.map +1 -1
  732. package/dist/esm/internal/differ/orPatch.js.map +1 -1
  733. package/dist/esm/internal/differ.js.map +1 -1
  734. package/dist/esm/internal/effect/circular.js +1 -0
  735. package/dist/esm/internal/effect/circular.js.map +1 -1
  736. package/dist/esm/internal/effectable.js +37 -6
  737. package/dist/esm/internal/effectable.js.map +1 -1
  738. package/dist/esm/internal/either.js +2 -2
  739. package/dist/esm/internal/either.js.map +1 -1
  740. package/dist/esm/internal/encoding/base64.js.map +1 -1
  741. package/dist/esm/internal/encoding/base64Url.js.map +1 -1
  742. package/dist/esm/internal/encoding/common.js.map +1 -1
  743. package/dist/esm/internal/encoding/hex.js.map +1 -1
  744. package/dist/esm/internal/executionStrategy.js.map +1 -1
  745. package/dist/esm/internal/fiber.js +2 -0
  746. package/dist/esm/internal/fiber.js.map +1 -1
  747. package/dist/esm/internal/fiberId.js +4 -4
  748. package/dist/esm/internal/fiberId.js.map +1 -1
  749. package/dist/esm/internal/fiberMessage.js.map +1 -1
  750. package/dist/esm/internal/fiberRefs/patch.js.map +1 -1
  751. package/dist/esm/internal/fiberRefs.js.map +1 -1
  752. package/dist/esm/internal/fiberRuntime.js +178 -215
  753. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  754. package/dist/esm/internal/groupBy.js +4 -1
  755. package/dist/esm/internal/groupBy.js.map +1 -1
  756. package/dist/esm/internal/hashMap/array.js.map +1 -1
  757. package/dist/esm/internal/hashMap/node.js.map +1 -1
  758. package/dist/esm/internal/hashMap.js +3 -3
  759. package/dist/esm/internal/hashMap.js.map +1 -1
  760. package/dist/esm/internal/hashSet.js +4 -4
  761. package/dist/esm/internal/hashSet.js.map +1 -1
  762. package/dist/esm/internal/keyedPool.js +3 -0
  763. package/dist/esm/internal/keyedPool.js.map +1 -1
  764. package/dist/esm/internal/layer.js +22 -52
  765. package/dist/esm/internal/layer.js.map +1 -1
  766. package/dist/esm/internal/logger.js +2 -1
  767. package/dist/esm/internal/logger.js.map +1 -1
  768. package/dist/esm/internal/matcher.js.map +1 -1
  769. package/dist/esm/internal/metric/hook.js +2 -1
  770. package/dist/esm/internal/metric/hook.js.map +1 -1
  771. package/dist/esm/internal/metric/key.js +1 -1
  772. package/dist/esm/internal/metric/key.js.map +1 -1
  773. package/dist/esm/internal/metric/keyType.js +2 -1
  774. package/dist/esm/internal/metric/keyType.js.map +1 -1
  775. package/dist/esm/internal/metric/pair.js +1 -1
  776. package/dist/esm/internal/metric/pair.js.map +1 -1
  777. package/dist/esm/internal/metric/polling.js +6 -6
  778. package/dist/esm/internal/metric/polling.js.map +1 -1
  779. package/dist/esm/internal/metric/registry.js.map +1 -1
  780. package/dist/esm/internal/metric/state.js +1 -1
  781. package/dist/esm/internal/metric/state.js.map +1 -1
  782. package/dist/esm/internal/metric.js +11 -5
  783. package/dist/esm/internal/metric.js.map +1 -1
  784. package/dist/esm/internal/opCodes/layer.js +3 -3
  785. package/dist/esm/internal/opCodes/layer.js.map +1 -1
  786. package/dist/esm/internal/option.js +2 -2
  787. package/dist/esm/internal/option.js.map +1 -1
  788. package/dist/esm/internal/pool.js +2 -0
  789. package/dist/esm/internal/pool.js.map +1 -1
  790. package/dist/esm/internal/pubsub.js +25 -24
  791. package/dist/esm/internal/pubsub.js.map +1 -1
  792. package/dist/esm/internal/query.js +1 -1
  793. package/dist/esm/internal/query.js.map +1 -1
  794. package/dist/esm/internal/queue.js +13 -2
  795. package/dist/esm/internal/queue.js.map +1 -1
  796. package/dist/esm/internal/random.js.map +1 -1
  797. package/dist/esm/internal/redBlackTree/iterator.js.map +1 -1
  798. package/dist/esm/internal/redBlackTree.js +9 -3
  799. package/dist/esm/internal/redBlackTree.js.map +1 -1
  800. package/dist/esm/internal/ref.js +1 -0
  801. package/dist/esm/internal/ref.js.map +1 -1
  802. package/dist/esm/internal/reloadable.js +1 -1
  803. package/dist/esm/internal/reloadable.js.map +1 -1
  804. package/dist/esm/internal/request.js +31 -15
  805. package/dist/esm/internal/request.js.map +1 -1
  806. package/dist/esm/internal/resource.js +4 -3
  807. package/dist/esm/internal/resource.js.map +1 -1
  808. package/dist/esm/internal/ringBuffer.js.map +1 -1
  809. package/dist/esm/internal/runtime.js +3 -4
  810. package/dist/esm/internal/runtime.js.map +1 -1
  811. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  812. package/dist/esm/internal/schedule/interval.js.map +1 -1
  813. package/dist/esm/internal/schedule/intervals.js.map +1 -1
  814. package/dist/esm/internal/schedule.js +12 -8
  815. package/dist/esm/internal/schedule.js.map +1 -1
  816. package/dist/esm/internal/scopedCache.js +5 -2
  817. package/dist/esm/internal/scopedCache.js.map +1 -1
  818. package/dist/esm/internal/scopedRef.js +1 -0
  819. package/dist/esm/internal/scopedRef.js.map +1 -1
  820. package/dist/esm/internal/sink.js +6 -2
  821. package/dist/esm/internal/sink.js.map +1 -1
  822. package/dist/esm/internal/stm/core.js +5 -3
  823. package/dist/esm/internal/stm/core.js.map +1 -1
  824. package/dist/esm/internal/stm/stm/journal.js.map +1 -1
  825. package/dist/esm/internal/stm/stm/stmState.js.map +1 -1
  826. package/dist/esm/internal/stm/stm/tExit.js +2 -1
  827. package/dist/esm/internal/stm/stm/tExit.js.map +1 -1
  828. package/dist/esm/internal/stm/stm.js.map +1 -1
  829. package/dist/esm/internal/stm/tArray.js +1 -1
  830. package/dist/esm/internal/stm/tArray.js.map +1 -1
  831. package/dist/esm/internal/stm/tDeferred.js.map +1 -1
  832. package/dist/esm/internal/stm/tMap.js +2 -1
  833. package/dist/esm/internal/stm/tMap.js.map +1 -1
  834. package/dist/esm/internal/stm/tPriorityQueue.js +1 -1
  835. package/dist/esm/internal/stm/tPriorityQueue.js.map +1 -1
  836. package/dist/esm/internal/stm/tPubSub.js +17 -14
  837. package/dist/esm/internal/stm/tPubSub.js.map +1 -1
  838. package/dist/esm/internal/stm/tQueue.js +8 -7
  839. package/dist/esm/internal/stm/tQueue.js.map +1 -1
  840. package/dist/esm/internal/stm/tRandom.js.map +1 -1
  841. package/dist/esm/internal/stm/tReentrantLock.js.map +1 -1
  842. package/dist/esm/internal/stm/tRef.js +1 -1
  843. package/dist/esm/internal/stm/tRef.js.map +1 -1
  844. package/dist/esm/internal/stm/tSemaphore.js +2 -2
  845. package/dist/esm/internal/stm/tSemaphore.js.map +1 -1
  846. package/dist/esm/internal/stm/tSet.js +1 -1
  847. package/dist/esm/internal/stm/tSet.js.map +1 -1
  848. package/dist/esm/internal/stream/haltStrategy.js.map +1 -1
  849. package/dist/esm/internal/stream/handoff.js +1 -1
  850. package/dist/esm/internal/stream/handoff.js.map +1 -1
  851. package/dist/esm/internal/stream.js +5 -5
  852. package/dist/esm/internal/stream.js.map +1 -1
  853. package/dist/esm/internal/string-utils.js.map +1 -1
  854. package/dist/esm/internal/subscriptionRef.js +1 -1
  855. package/dist/esm/internal/subscriptionRef.js.map +1 -1
  856. package/dist/esm/internal/supervisor/patch.js.map +1 -1
  857. package/dist/esm/internal/supervisor.js +1 -0
  858. package/dist/esm/internal/supervisor.js.map +1 -1
  859. package/dist/esm/internal/synchronizedRef.js.map +1 -1
  860. package/dist/esm/internal/take.js +3 -2
  861. package/dist/esm/internal/take.js.map +1 -1
  862. package/dist/esm/internal/version.js +1 -1
  863. package/dist/esm/package.json +1 -1
  864. package/package.json +10 -2
  865. package/src/BigDecimal.ts +7 -7
  866. package/src/Brand.ts +4 -4
  867. package/src/Cache.ts +18 -19
  868. package/src/Cause.ts +126 -41
  869. package/src/Channel.ts +12 -11
  870. package/src/ChildExecutorDecision.ts +10 -2
  871. package/src/Chunk.ts +110 -93
  872. package/src/Clock.ts +4 -4
  873. package/src/Config.ts +20 -20
  874. package/src/ConfigError.ts +8 -8
  875. package/src/ConfigProvider.ts +5 -5
  876. package/src/ConfigProviderPathPatch.ts +1 -1
  877. package/src/Console.ts +36 -36
  878. package/src/Context.ts +8 -7
  879. package/src/Data.ts +17 -48
  880. package/src/Deferred.ts +5 -4
  881. package/src/Differ.ts +24 -23
  882. package/src/Duration.ts +59 -2
  883. package/src/Effect.ts +104 -53
  884. package/src/Either.ts +93 -15
  885. package/src/Equal.ts +1 -1
  886. package/src/Equivalence.ts +2 -2
  887. package/src/Exit.ts +21 -7
  888. package/src/Fiber.ts +25 -18
  889. package/src/FiberRef.ts +14 -7
  890. package/src/GroupBy.ts +7 -6
  891. package/src/HKT.ts +5 -4
  892. package/src/Hash.ts +1 -1
  893. package/src/HashMap.ts +6 -4
  894. package/src/HashSet.ts +11 -11
  895. package/src/Inspectable.ts +5 -7
  896. package/src/KeyedPool.ts +16 -9
  897. package/src/Layer.ts +21 -58
  898. package/src/List.ts +68 -65
  899. package/src/Logger.ts +7 -6
  900. package/src/Match.ts +61 -49
  901. package/src/MergeDecision.ts +8 -7
  902. package/src/MergeState.ts +11 -5
  903. package/src/Metric.ts +13 -10
  904. package/src/MetricHook.ts +7 -6
  905. package/src/MetricKey.ts +4 -3
  906. package/src/MetricKeyType.ts +5 -4
  907. package/src/MetricPair.ts +4 -3
  908. package/src/MetricPolling.ts +22 -22
  909. package/src/MetricRegistry.ts +9 -9
  910. package/src/MetricState.ts +8 -5
  911. package/src/MutableHashMap.ts +3 -3
  912. package/src/MutableHashSet.ts +3 -3
  913. package/src/MutableList.ts +3 -3
  914. package/src/MutableQueue.ts +3 -3
  915. package/src/MutableRef.ts +3 -3
  916. package/src/NonEmptyIterable.ts +2 -2
  917. package/src/Option.ts +50 -29
  918. package/src/Order.ts +2 -2
  919. package/src/Pipeable.ts +275 -277
  920. package/src/Pool.ts +21 -22
  921. package/src/Predicate.ts +21 -2
  922. package/src/PrimaryKey.ts +23 -0
  923. package/src/PubSub.ts +3 -3
  924. package/src/Queue.ts +55 -32
  925. package/src/Random.ts +3 -3
  926. package/src/ReadonlyArray.ts +351 -390
  927. package/src/ReadonlyRecord.ts +97 -40
  928. package/src/RedBlackTree.ts +6 -2
  929. package/src/Ref.ts +5 -4
  930. package/src/Reloadable.ts +4 -3
  931. package/src/Request.ts +68 -11
  932. package/src/RequestBlock.ts +27 -66
  933. package/src/RequestResolver.ts +7 -6
  934. package/src/Resource.ts +5 -4
  935. package/src/Runtime.ts +3 -3
  936. package/src/STM.ts +27 -15
  937. package/src/Schedule.ts +14 -13
  938. package/src/Scheduler.ts +3 -3
  939. package/src/Scope.ts +3 -3
  940. package/src/ScopedCache.ts +13 -12
  941. package/src/ScopedRef.ts +4 -3
  942. package/src/SingleProducerAsyncInput.ts +7 -7
  943. package/src/Sink.ts +29 -14
  944. package/src/SortedMap.ts +12 -5
  945. package/src/SortedSet.ts +29 -43
  946. package/src/Stream.ts +75 -33
  947. package/src/StreamEmit.ts +12 -12
  948. package/src/Streamable.ts +3 -0
  949. package/src/SubscriptionRef.ts +6 -3
  950. package/src/Supervisor.ts +12 -11
  951. package/src/SynchronizedRef.ts +5 -4
  952. package/src/TArray.ts +5 -4
  953. package/src/TDeferred.ts +6 -5
  954. package/src/TMap.ts +6 -5
  955. package/src/TPriorityQueue.ts +5 -4
  956. package/src/TPubSub.ts +7 -3
  957. package/src/TQueue.ts +12 -11
  958. package/src/TRandom.ts +3 -3
  959. package/src/TRef.ts +6 -5
  960. package/src/TSet.ts +5 -4
  961. package/src/Take.ts +5 -4
  962. package/src/TestAnnotation.ts +9 -5
  963. package/src/TestAnnotations.ts +2 -2
  964. package/src/TestClock.ts +3 -5
  965. package/src/TestContext.ts +5 -4
  966. package/src/TestLive.ts +1 -1
  967. package/src/TestSized.ts +1 -1
  968. package/src/Tracer.ts +6 -6
  969. package/src/Types.ts +32 -0
  970. package/src/UpstreamPullRequest.ts +12 -5
  971. package/src/UpstreamPullStrategy.ts +5 -4
  972. package/src/Utils.ts +7 -6
  973. package/src/index.ts +5 -0
  974. package/src/internal/blockedRequests.ts +78 -81
  975. package/src/internal/cache.ts +15 -12
  976. package/src/internal/cause.ts +15 -139
  977. package/src/internal/channel/channelExecutor.ts +1 -1
  978. package/src/internal/channel/channelState.ts +10 -8
  979. package/src/internal/channel/continuation.ts +71 -42
  980. package/src/internal/channel/mergeDecision.ts +1 -1
  981. package/src/internal/channel/singleProducerAsyncInput.ts +1 -1
  982. package/src/internal/channel/subexecutor.ts +7 -7
  983. package/src/internal/channel/upstreamPullRequest.ts +1 -1
  984. package/src/internal/channel/upstreamPullStrategy.ts +1 -1
  985. package/src/internal/config.ts +21 -29
  986. package/src/internal/configError.ts +2 -2
  987. package/src/internal/configProvider.ts +20 -5
  988. package/src/internal/context.ts +6 -6
  989. package/src/internal/core-effect.ts +75 -67
  990. package/src/internal/core-stream.ts +25 -22
  991. package/src/internal/core.ts +360 -152
  992. package/src/internal/data.ts +3 -22
  993. package/src/internal/dataSource.ts +1 -1
  994. package/src/internal/deferred.ts +7 -5
  995. package/src/internal/differ/contextPatch.ts +5 -5
  996. package/src/internal/differ/orPatch.ts +18 -6
  997. package/src/internal/effect/circular.ts +4 -3
  998. package/src/internal/effectable.ts +41 -8
  999. package/src/internal/either.ts +2 -2
  1000. package/src/internal/fiber.ts +2 -0
  1001. package/src/internal/fiberId.ts +4 -4
  1002. package/src/internal/fiberMessage.ts +1 -4
  1003. package/src/internal/fiberRuntime.ts +242 -284
  1004. package/src/internal/fiberScope.ts +1 -1
  1005. package/src/internal/groupBy.ts +5 -2
  1006. package/src/internal/hashMap/node.ts +5 -5
  1007. package/src/internal/hashMap.ts +25 -24
  1008. package/src/internal/hashSet.ts +20 -22
  1009. package/src/internal/keyedPool.ts +7 -4
  1010. package/src/internal/layer.ts +35 -89
  1011. package/src/internal/logger.ts +2 -1
  1012. package/src/internal/metric/hook.ts +2 -1
  1013. package/src/internal/metric/key.ts +2 -2
  1014. package/src/internal/metric/keyType.ts +2 -1
  1015. package/src/internal/metric/pair.ts +1 -1
  1016. package/src/internal/metric/polling.ts +26 -26
  1017. package/src/internal/metric/state.ts +1 -1
  1018. package/src/internal/metric.ts +12 -5
  1019. package/src/internal/opCodes/layer.ts +6 -6
  1020. package/src/internal/option.ts +2 -2
  1021. package/src/internal/pool.ts +4 -2
  1022. package/src/internal/pubsub.ts +66 -62
  1023. package/src/internal/query.ts +1 -1
  1024. package/src/internal/queue.ts +36 -14
  1025. package/src/internal/redBlackTree/iterator.ts +1 -1
  1026. package/src/internal/redBlackTree/node.ts +1 -1
  1027. package/src/internal/redBlackTree.ts +11 -4
  1028. package/src/internal/ref.ts +2 -1
  1029. package/src/internal/reloadable.ts +2 -2
  1030. package/src/internal/request.ts +53 -14
  1031. package/src/internal/resource.ts +6 -5
  1032. package/src/internal/ringBuffer.ts +1 -1
  1033. package/src/internal/runtime.ts +4 -5
  1034. package/src/internal/schedule.ts +12 -8
  1035. package/src/internal/scopedCache.ts +14 -7
  1036. package/src/internal/scopedRef.ts +2 -1
  1037. package/src/internal/sink.ts +11 -4
  1038. package/src/internal/stack.ts +1 -1
  1039. package/src/internal/stm/core.ts +6 -4
  1040. package/src/internal/stm/stm/stmState.ts +1 -1
  1041. package/src/internal/stm/stm/tExit.ts +8 -6
  1042. package/src/internal/stm/stm/tryCommit.ts +1 -1
  1043. package/src/internal/stm/stm/versioned.ts +1 -1
  1044. package/src/internal/stm/stm.ts +2 -2
  1045. package/src/internal/stm/tArray.ts +3 -3
  1046. package/src/internal/stm/tDeferred.ts +3 -3
  1047. package/src/internal/stm/tMap.ts +5 -4
  1048. package/src/internal/stm/tPriorityQueue.ts +3 -3
  1049. package/src/internal/stm/tPubSub.ts +43 -38
  1050. package/src/internal/stm/tQueue.ts +9 -8
  1051. package/src/internal/stm/tReentrantLock.ts +2 -2
  1052. package/src/internal/stm/tRef.ts +2 -2
  1053. package/src/internal/stm/tSemaphore.ts +2 -2
  1054. package/src/internal/stm/tSet.ts +3 -3
  1055. package/src/internal/stream/debounceState.ts +2 -2
  1056. package/src/internal/stream/handoff.ts +4 -4
  1057. package/src/internal/stream/handoffSignal.ts +2 -2
  1058. package/src/internal/stream/pull.ts +1 -1
  1059. package/src/internal/stream.ts +68 -35
  1060. package/src/internal/subscriptionRef.ts +3 -3
  1061. package/src/internal/supervisor.ts +4 -3
  1062. package/src/internal/take.ts +4 -3
  1063. package/src/internal/version.ts +1 -1
@@ -17,6 +17,7 @@ import * as O from "./Option.js"
17
17
  import * as Order from "./Order.js"
18
18
  import type { Predicate, Refinement } from "./Predicate.js"
19
19
  import * as RR from "./ReadonlyRecord.js"
20
+ import * as Tuple from "./Tuple.js"
20
21
 
21
22
  /**
22
23
  * @category type lambdas
@@ -224,29 +225,30 @@ export const prepend: {
224
225
  } = dual(2, <A, B>(self: Iterable<A>, head: B): NonEmptyArray<A | B> => [head, ...self])
225
226
 
226
227
  /**
228
+ * Prepends the specified prefix array (or iterable) to the beginning of the specified array (or iterable).
229
+ * If either array is non-empty, the result is also a non-empty array.
230
+ *
231
+ * @example
232
+ * import * as ReadonlyArray from "effect/ReadonlyArray"
233
+ *
234
+ * assert.deepStrictEqual(
235
+ * ReadonlyArray.prependAll([1, 2], ["a", "b"]),
236
+ * ["a", "b", 1, 2]
237
+ * )
238
+ *
227
239
  * @category concatenating
228
240
  * @since 2.0.0
229
241
  */
230
242
  export const prependAll: {
231
- <B>(that: Iterable<B>): <A>(self: Iterable<A>) => Array<A | B>
232
- <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
233
- } = dual(
234
- 2,
235
- <A>(self: Iterable<A>, that: Iterable<A>): Array<A> => fromIterable(that).concat(fromIterable(self))
236
- )
237
-
238
- /**
239
- * @category concatenating
240
- * @since 2.0.0
241
- */
242
- export const prependAllNonEmpty: {
243
- <B>(that: NonEmptyReadonlyArray<B>): <A>(self: Iterable<A>) => NonEmptyArray<A | B>
244
- <B>(that: Iterable<B>): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A | B>
243
+ <S extends ReadonlyArray<any> | Iterable<any>, T extends ReadonlyArray<any> | Iterable<any>>(
244
+ that: T
245
+ ): (self: S) => ReadonlyArray.With2<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
245
246
  <A, B>(self: Iterable<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<A | B>
246
247
  <A, B>(self: NonEmptyReadonlyArray<A>, that: Iterable<B>): NonEmptyArray<A | B>
248
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
247
249
  } = dual(
248
250
  2,
249
- <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B> => prependAll(self, that)
251
+ <A>(self: Iterable<A>, that: Iterable<A>): Array<A> => fromIterable(that).concat(fromIterable(self))
250
252
  )
251
253
 
252
254
  /**
@@ -261,29 +263,22 @@ export const append: {
261
263
  } = dual(2, <A, B>(self: Iterable<A>, last: B): Array<A | B> => [...self, last])
262
264
 
263
265
  /**
266
+ * Concatenates two arrays (or iterables), combining their elements.
267
+ * If either array is non-empty, the result is also a non-empty array.
268
+ *
264
269
  * @category concatenating
265
270
  * @since 2.0.0
266
271
  */
267
272
  export const appendAll: {
268
- <B>(that: Iterable<B>): <A>(self: Iterable<A>) => Array<A | B>
269
- <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
270
- } = dual(
271
- 2,
272
- <A>(self: Iterable<A>, that: Iterable<A>): Array<A> => fromIterable(self).concat(fromIterable(that))
273
- )
274
-
275
- /**
276
- * @category concatenating
277
- * @since 2.0.0
278
- */
279
- export const appendAllNonEmpty: {
280
- <B>(that: NonEmptyReadonlyArray<B>): <A>(self: Iterable<A>) => NonEmptyArray<A | B>
281
- <B>(that: Iterable<B>): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A | B>
273
+ <S extends ReadonlyArray<any> | Iterable<any>, T extends ReadonlyArray<any> | Iterable<any>>(
274
+ that: T
275
+ ): (self: S) => ReadonlyArray.With2<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
282
276
  <A, B>(self: Iterable<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<A | B>
283
277
  <A, B>(self: NonEmptyReadonlyArray<A>, that: Iterable<B>): NonEmptyArray<A | B>
278
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
284
279
  } = dual(
285
280
  2,
286
- <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B> => appendAll(self, that)
281
+ <A>(self: Iterable<A>, that: Iterable<A>): Array<A> => fromIterable(self).concat(fromIterable(that))
287
282
  )
288
283
 
289
284
  /**
@@ -444,7 +439,7 @@ export const unsafeGet: {
444
439
  */
445
440
  export const unprepend = <A>(
446
441
  self: NonEmptyReadonlyArray<A>
447
- ): [A, Array<A>] => [headNonEmpty(self), tailNonEmpty(self)]
442
+ ): [firstElement: A, remainingElements: Array<A>] => [headNonEmpty(self), tailNonEmpty(self)]
448
443
 
449
444
  /**
450
445
  * Return a tuple containing a copy of the `NonEmptyReadonlyArray` without its last element, and that last element.
@@ -454,7 +449,7 @@ export const unprepend = <A>(
454
449
  */
455
450
  export const unappend = <A>(
456
451
  self: NonEmptyReadonlyArray<A>
457
- ): [Array<A>, A] => [initNonEmpty(self), lastNonEmpty(self)]
452
+ ): [arrayWithoutLastElement: Array<A>, lastElement: A] => [initNonEmpty(self), lastNonEmpty(self)]
458
453
 
459
454
  /**
460
455
  * Get the first element of a `ReadonlyArray`, or `None` if the `ReadonlyArray` is empty.
@@ -562,11 +557,11 @@ export const takeRight: {
562
557
  */
563
558
  export const takeWhile: {
564
559
  <A, B extends A>(refinement: Refinement<A, B>): (self: Iterable<A>) => Array<B>
565
- <A>(predicate: Predicate<A>): <B extends A>(self: Iterable<B>) => Array<B>
560
+ <B extends A, A = B>(predicate: Predicate<A>): (self: Iterable<B>) => Array<B>
566
561
  <A, B extends A>(self: Iterable<A>, refinement: Refinement<A, B>): Array<B>
567
- <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Array<B>
568
- } = dual(2, <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Array<B> => {
569
- const out: Array<B> = []
562
+ <A>(self: Iterable<A>, predicate: Predicate<A>): Array<A>
563
+ } = dual(2, <A>(self: Iterable<A>, predicate: Predicate<A>): Array<A> => {
564
+ const out: Array<A> = []
570
565
  for (const a of self) {
571
566
  if (!predicate(a)) {
572
567
  break
@@ -597,18 +592,15 @@ const spanIndex = <A>(self: Iterable<A>, predicate: Predicate<A>): number => {
597
592
  * @since 2.0.0
598
593
  */
599
594
  export const span: {
600
- <A, B extends A>(
601
- refinement: Refinement<A, B>
602
- ): (self: Iterable<A>) => [init: Array<B>, rest: Array<A>]
603
- <A>(predicate: Predicate<A>): <B extends A>(self: Iterable<B>) => [init: Array<B>, rest: Array<B>]
604
- <A, B extends A>(
605
- self: Iterable<A>,
595
+ <C extends A, B extends A, A = C>(
606
596
  refinement: Refinement<A, B>
607
- ): [init: Array<B>, rest: Array<A>]
608
- <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): [init: Array<B>, rest: Array<B>]
597
+ ): (self: Iterable<C>) => [init: Array<B>, rest: Array<Exclude<C, B>>]
598
+ <B extends A, A = B>(predicate: Predicate<A>): (self: Iterable<B>) => [init: Array<B>, rest: Array<B>]
599
+ <A, B extends A>(self: Iterable<A>, refinement: Refinement<A, B>): [init: Array<B>, rest: Array<Exclude<A, B>>]
600
+ <A>(self: Iterable<A>, predicate: Predicate<A>): [init: Array<A>, rest: Array<A>]
609
601
  } = dual(
610
602
  2,
611
- <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): [init: Array<B>, rest: Array<B>] =>
603
+ <A>(self: Iterable<A>, predicate: Predicate<A>): [init: Array<A>, rest: Array<A>] =>
612
604
  splitAt(self, spanIndex(self, predicate))
613
605
  )
614
606
 
@@ -651,14 +643,11 @@ export const dropRight: {
651
643
  * @since 2.0.0
652
644
  */
653
645
  export const dropWhile: {
654
- <A, B extends A>(refinement: Refinement<A, B>): (self: Iterable<A>) => Array<B>
655
- <A>(predicate: Predicate<A>): <B extends A>(self: Iterable<B>) => Array<B>
656
- <A, B extends A>(self: Iterable<A>, refinement: Refinement<A, B>): Array<B>
657
- <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Array<B>
646
+ <B extends A, A = B>(predicate: Predicate<A>): (self: Iterable<B>) => Array<B>
647
+ <A>(self: Iterable<A>, predicate: Predicate<A>): Array<A>
658
648
  } = dual(
659
649
  2,
660
- <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Array<B> =>
661
- fromIterable(self).slice(spanIndex(self, predicate))
650
+ <A>(self: Iterable<A>, predicate: Predicate<A>): Array<A> => fromIterable(self).slice(spanIndex(self, predicate))
662
651
  )
663
652
 
664
653
  /**
@@ -709,10 +698,10 @@ export const findLastIndex: {
709
698
  */
710
699
  export const findFirst: {
711
700
  <A, B extends A>(refinement: Refinement<A, B>): (self: Iterable<A>) => Option<B>
712
- <A>(predicate: Predicate<A>): <B extends A>(self: Iterable<B>) => Option<B>
701
+ <B extends A, A = B>(predicate: Predicate<A>): (self: Iterable<B>) => Option<B>
713
702
  <A, B extends A>(self: Iterable<A>, refinement: Refinement<A, B>): Option<B>
714
- <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Option<B>
715
- } = dual(2, <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Option<B> => {
703
+ <A>(self: Iterable<A>, predicate: Predicate<A>): Option<A>
704
+ } = dual(2, <A>(self: Iterable<A>, predicate: Predicate<A>): Option<A> => {
716
705
  const input = fromIterable(self)
717
706
  for (let i = 0; i < input.length; i++) {
718
707
  if (predicate(input[i])) {
@@ -730,10 +719,10 @@ export const findFirst: {
730
719
  */
731
720
  export const findLast: {
732
721
  <A, B extends A>(refinement: Refinement<A, B>): (self: Iterable<A>) => Option<B>
733
- <A>(predicate: Predicate<A>): <B extends A>(self: Iterable<B>) => Option<B>
722
+ <B extends A, A = B>(predicate: Predicate<A>): (self: Iterable<B>) => Option<B>
734
723
  <A, B extends A>(self: Iterable<A>, refinement: Refinement<A, B>): Option<B>
735
- <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Option<B>
736
- } = dual(2, <B extends A, A>(self: Iterable<B>, predicate: Predicate<A>): Option<B> => {
724
+ <A>(self: Iterable<A>, predicate: Predicate<A>): Option<A>
725
+ } = dual(2, <A>(self: Iterable<A>, predicate: Predicate<A>): Option<A> => {
737
726
  const input = fromIterable(self)
738
727
  for (let i = input.length - 1; i >= 0; i--) {
739
728
  if (predicate(input[i])) {
@@ -843,24 +832,23 @@ export const remove: {
843
832
  * @category elements
844
833
  * @since 2.0.0
845
834
  */
846
- export const reverse = <A>(self: Iterable<A>): Array<A> => Array.from(self).reverse()
847
-
848
- /**
849
- * @category elements
850
- * @since 2.0.0
851
- */
852
- export const reverseNonEmpty = <A>(
853
- self: NonEmptyReadonlyArray<A>
854
- ): NonEmptyArray<A> => [lastNonEmpty(self), ...self.slice(0, -1).reverse()]
835
+ export const reverse: {
836
+ <A>(self: NonEmptyReadonlyArray<A>): NonEmptyArray<A>
837
+ <A>(self: Iterable<A>): Array<A>
838
+ } = (<A>(self: Iterable<A>): Array<A> => Array.from(self).reverse()) as any
855
839
 
856
840
  /**
857
- * Sort the elements of an `Iterable` in increasing order, creating a new `Array`.
841
+ * Create a new array with elements sorted in increasing order based on the specified comparator.
842
+ * If the input is a `NonEmptyReadonlyArray`, the output will also be a `NonEmptyReadonlyArray`.
858
843
  *
859
844
  * @category sorting
860
845
  * @since 2.0.0
861
846
  */
862
847
  export const sort: {
863
- <B>(O: Order.Order<B>): <A extends B>(self: Iterable<A>) => Array<A>
848
+ <B>(
849
+ O: Order.Order<B>
850
+ ): <T extends ReadonlyArray<any> | Iterable<any>>(self: T) => ReadonlyArray.With<T, ReadonlyArray.Infer<T>>
851
+ <A extends B, B>(self: NonEmptyReadonlyArray<A>, O: Order.Order<B>): NonEmptyArray<A>
864
852
  <A extends B, B>(self: Iterable<A>, O: Order.Order<B>): Array<A>
865
853
  } = dual(2, <A extends B, B>(self: Iterable<A>, O: Order.Order<B>): Array<A> => {
866
854
  const out = Array.from(self)
@@ -881,20 +869,6 @@ export const sortWith: {
881
869
  sort(self, Order.mapInput(order, f))
882
870
  )
883
871
 
884
- /**
885
- * Sort the elements of a `NonEmptyReadonlyArray` in increasing order, creating a new `NonEmptyArray`.
886
- *
887
- * @category sorting
888
- * @since 2.0.0
889
- */
890
- export const sortNonEmpty: {
891
- <B>(O: Order.Order<B>): <A extends B>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A>
892
- <A extends B, B>(self: NonEmptyReadonlyArray<A>, O: Order.Order<B>): NonEmptyArray<A>
893
- } = dual(
894
- 2,
895
- <A extends B, B>(self: NonEmptyReadonlyArray<A>, O: Order.Order<B>): NonEmptyArray<A> => sort(O)(self) as any
896
- )
897
-
898
872
  /**
899
873
  * Sort the elements of an `Iterable` in increasing order, where elements are compared
900
874
  * using first `orders[0]`, then `orders[1]`, etc...
@@ -902,85 +876,62 @@ export const sortNonEmpty: {
902
876
  * @category sorting
903
877
  * @since 2.0.0
904
878
  */
905
- export const sortBy = <B>(...orders: ReadonlyArray<Order.Order<B>>) => <A extends B>(self: Iterable<A>): Array<A> => {
906
- const input = fromIterable(self)
907
- return (isNonEmptyReadonlyArray(input) ? sortByNonEmpty(...orders)(input) : [])
879
+ export const sortBy = <B>(...orders: ReadonlyArray<Order.Order<B>>): {
880
+ <A extends B>(as: NonEmptyReadonlyArray<A>): NonEmptyArray<A>
881
+ <A extends B>(self: Iterable<A>): Array<A>
882
+ } => {
883
+ const sortByAll = sort(Order.combineAll(orders))
884
+ return (<A extends B>(self: Iterable<A>): Array<A> => {
885
+ const input = fromIterable(self)
886
+ if (isNonEmptyReadonlyArray(input)) {
887
+ return sortByAll(input)
888
+ }
889
+ return []
890
+ }) as any
908
891
  }
909
892
 
910
- /**
911
- * @category sorting
912
- * @since 2.0.0
913
- */
914
- export const sortByNonEmpty = <B>(
915
- ...orders: ReadonlyArray<Order.Order<B>>
916
- ): <A extends B>(as: NonEmptyReadonlyArray<A>) => NonEmptyArray<A> => sortNonEmpty(Order.combineAll(orders))
917
-
918
893
  /**
919
894
  * Takes two `Iterable`s and returns an `Array` of corresponding pairs.
920
895
  * If one input `Iterable` is short, excess elements of the
921
896
  * longer `Iterable` are discarded.
922
897
  *
898
+ * @category zipping
923
899
  * @since 2.0.0
924
900
  */
925
901
  export const zip: {
902
+ <B>(that: NonEmptyReadonlyArray<B>): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<[A, B]>
926
903
  <B>(that: Iterable<B>): <A>(self: Iterable<A>) => Array<[A, B]>
904
+ <A, B>(self: NonEmptyReadonlyArray<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<[A, B]>
927
905
  <A, B>(self: Iterable<A>, that: Iterable<B>): Array<[A, B]>
928
906
  } = dual(
929
907
  2,
930
- <A, B>(self: Iterable<A>, that: Iterable<B>): Array<[A, B]> => zipWith(self, that, (a, b) => [a, b])
908
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<[A, B]> => zipWith(self, that, Tuple.make)
931
909
  )
932
910
 
933
911
  /**
934
912
  * Apply a function to pairs of elements at the same index in two `Iterable`s, collecting the results in a new `Array`. If one
935
913
  * input `Iterable` is short, excess elements of the longer `Iterable` are discarded.
936
914
  *
915
+ * @category zipping
937
916
  * @since 2.0.0
938
917
  */
939
918
  export const zipWith: {
919
+ <B, A, C>(that: NonEmptyReadonlyArray<B>, f: (a: A, b: B) => C): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<C>
940
920
  <B, A, C>(that: Iterable<B>, f: (a: A, b: B) => C): (self: Iterable<A>) => Array<C>
921
+ <A, B, C>(self: NonEmptyReadonlyArray<A>, that: NonEmptyReadonlyArray<B>, f: (a: A, b: B) => C): NonEmptyArray<C>
941
922
  <B, A, C>(self: Iterable<A>, that: Iterable<B>, f: (a: A, b: B) => C): Array<C>
942
923
  } = dual(3, <B, A, C>(self: Iterable<A>, that: Iterable<B>, f: (a: A, b: B) => C): Array<C> => {
943
924
  const as = fromIterable(self)
944
925
  const bs = fromIterable(that)
945
- return isNonEmptyReadonlyArray(as) && isNonEmptyReadonlyArray(bs) ? zipNonEmptyWith(bs, f)(as) : []
946
- })
947
-
948
- /**
949
- * @since 2.0.0
950
- */
951
- export const zipNonEmpty: {
952
- <B>(that: NonEmptyReadonlyArray<B>): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<[A, B]>
953
- <A, B>(self: NonEmptyReadonlyArray<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<[A, B]>
954
- } = dual(
955
- 2,
956
- <A, B>(self: NonEmptyReadonlyArray<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<[A, B]> =>
957
- zipNonEmptyWith(self, that, (a, b) => [a, b])
958
- )
959
-
960
- /**
961
- * @since 2.0.0
962
- */
963
- export const zipNonEmptyWith: {
964
- <B, A, C>(
965
- that: NonEmptyReadonlyArray<B>,
966
- f: (a: A, b: B) => C
967
- ): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<C>
968
- <A, B, C>(
969
- self: NonEmptyReadonlyArray<A>,
970
- that: NonEmptyReadonlyArray<B>,
971
- f: (a: A, b: B) => C
972
- ): NonEmptyArray<C>
973
- } = dual(3, <A, B, C>(
974
- self: NonEmptyReadonlyArray<A>,
975
- that: NonEmptyReadonlyArray<B>,
976
- f: (a: A, b: B) => C
977
- ): NonEmptyArray<C> => {
978
- const cs: NonEmptyArray<C> = [f(headNonEmpty(self), headNonEmpty(that))]
979
- const len = Math.min(self.length, that.length)
980
- for (let i = 1; i < len; i++) {
981
- cs[i] = f(self[i], that[i])
926
+ if (isNonEmptyReadonlyArray(as) && isNonEmptyReadonlyArray(bs)) {
927
+ const out: NonEmptyArray<C> = [f(headNonEmpty(as), headNonEmpty(bs))]
928
+ const len = Math.min(as.length, bs.length)
929
+ for (let i = 1; i < len; i++) {
930
+ out[i] = f(as[i], bs[i])
931
+ }
932
+ return out
982
933
  }
983
- return cs
934
+ return []
984
935
  })
985
936
 
986
937
  /**
@@ -988,57 +939,49 @@ export const zipNonEmptyWith: {
988
939
  *
989
940
  * @since 2.0.0
990
941
  */
991
- export const unzip = <A, B>(self: Iterable<readonly [A, B]>): [Array<A>, Array<B>] => {
942
+ export const unzip: {
943
+ <A, B>(self: NonEmptyReadonlyArray<readonly [A, B]>): [NonEmptyArray<A>, NonEmptyArray<B>]
944
+ <A, B>(self: Iterable<readonly [A, B]>): [Array<A>, Array<B>]
945
+ } = (<A, B>(self: Iterable<readonly [A, B]>): [Array<A>, Array<B>] => {
992
946
  const input = fromIterable(self)
993
- return isNonEmptyReadonlyArray(input) ? unzipNonEmpty(input) : [[], []]
994
- }
995
-
996
- /**
997
- * @since 2.0.0
998
- */
999
- export const unzipNonEmpty = <A, B>(
1000
- self: NonEmptyReadonlyArray<readonly [A, B]>
1001
- ): [NonEmptyArray<A>, NonEmptyArray<B>] => {
1002
- const fa: NonEmptyArray<A> = [self[0][0]]
1003
- const fb: NonEmptyArray<B> = [self[0][1]]
1004
- for (let i = 1; i < self.length; i++) {
1005
- fa[i] = self[i][0]
1006
- fb[i] = self[i][1]
947
+ if (isNonEmptyReadonlyArray(input)) {
948
+ const fa: NonEmptyArray<A> = [input[0][0]]
949
+ const fb: NonEmptyArray<B> = [input[0][1]]
950
+ for (let i = 1; i < input.length; i++) {
951
+ fa[i] = input[i][0]
952
+ fb[i] = input[i][1]
953
+ }
954
+ return [fa, fb]
1007
955
  }
1008
- return [fa, fb]
1009
- }
956
+ return [[], []]
957
+ }) as any
1010
958
 
1011
959
  /**
1012
- * Places an element in between members of an `Iterable`
960
+ * Places an element in between members of an `Iterable`.
961
+ * If the input is a non-empty array, the result is also a non-empty array.
1013
962
  *
1014
963
  * @since 2.0.0
1015
964
  */
1016
965
  export const intersperse: {
1017
- <B>(middle: B): <A>(self: Iterable<A>) => Array<A | B>
966
+ <B>(
967
+ middle: B
968
+ ): <T extends ReadonlyArray<any> | Iterable<any>>(self: T) => ReadonlyArray.With<T, ReadonlyArray.Infer<T>>
969
+ <A, B>(self: NonEmptyReadonlyArray<A>, middle: B): NonEmptyArray<A | B>
1018
970
  <A, B>(self: Iterable<A>, middle: B): Array<A | B>
1019
971
  } = dual(2, <A, B>(self: Iterable<A>, middle: B): Array<A | B> => {
1020
972
  const input = fromIterable(self)
1021
- return (isNonEmptyReadonlyArray(input) ? intersperseNonEmpty(input, middle) : [])
1022
- })
1023
-
1024
- /**
1025
- * Places an element in between members of a `NonEmptyReadonlyArray`
1026
- *
1027
- * @since 2.0.0
1028
- */
1029
- export const intersperseNonEmpty: {
1030
- <B>(middle: B): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A | B>
1031
- <A, B>(self: NonEmptyReadonlyArray<A>, middle: B): NonEmptyArray<A | B>
1032
- } = dual(2, <A, B>(self: NonEmptyReadonlyArray<A>, middle: B): NonEmptyArray<A | B> => {
1033
- const out: NonEmptyArray<A | B> = [headNonEmpty(self)]
1034
- const tail = tailNonEmpty(self)
1035
- for (let i = 0; i < tail.length; i++) {
1036
- if (i < tail.length) {
1037
- out.push(middle)
973
+ if (isNonEmptyReadonlyArray(input)) {
974
+ const out: NonEmptyArray<A | B> = [headNonEmpty(input)]
975
+ const tail = tailNonEmpty(input)
976
+ for (let i = 0; i < tail.length; i++) {
977
+ if (i < tail.length) {
978
+ out.push(middle)
979
+ }
980
+ out.push(tail[i])
1038
981
  }
1039
- out.push(tail[i])
982
+ return out
1040
983
  }
1041
- return out
984
+ return []
1042
985
  })
1043
986
 
1044
987
  /**
@@ -1099,37 +1042,30 @@ export const setNonEmptyLast: {
1099
1042
 
1100
1043
  /**
1101
1044
  * Rotate an `Iterable` by `n` steps.
1045
+ * If the input is a non-empty array, the result is also a non-empty array.
1102
1046
  *
1103
1047
  * @since 2.0.0
1104
1048
  */
1105
1049
  export const rotate: {
1106
- (n: number): <A>(self: Iterable<A>) => Array<A>
1050
+ (n: number): <T extends ReadonlyArray<any> | Iterable<any>>(self: T) => ReadonlyArray.With<T, ReadonlyArray.Infer<T>>
1051
+ <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<A>
1107
1052
  <A>(self: Iterable<A>, n: number): Array<A>
1108
1053
  } = dual(2, <A>(self: Iterable<A>, n: number): Array<A> => {
1109
1054
  const input = fromIterable(self)
1110
- return isNonEmptyReadonlyArray(input) ? rotateNonEmpty(input, n) : []
1111
- })
1112
-
1113
- /**
1114
- * Rotate a `NonEmptyReadonlyArray` by `n` steps.
1115
- *
1116
- * @since 2.0.0
1117
- */
1118
- export const rotateNonEmpty: {
1119
- (n: number): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A>
1120
- <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<A>
1121
- } = dual(2, <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<A> => {
1122
- const len = self.length
1123
- const m = Math.round(n) % len
1124
- if (isOutOfBound(Math.abs(m), self) || m === 0) {
1125
- return copy(self)
1126
- }
1127
- if (m < 0) {
1128
- const [f, s] = splitNonEmptyAt(self, -m)
1129
- return appendAllNonEmpty(s, f)
1130
- } else {
1131
- return rotateNonEmpty(self, m - len)
1055
+ if (isNonEmptyReadonlyArray(input)) {
1056
+ const len = input.length
1057
+ const m = Math.round(n) % len
1058
+ if (isOutOfBound(Math.abs(m), input) || m === 0) {
1059
+ return copy(input)
1060
+ }
1061
+ if (m < 0) {
1062
+ const [f, s] = splitNonEmptyAt(input, -m)
1063
+ return appendAll(s, f)
1064
+ } else {
1065
+ return rotate(self, m - len)
1066
+ }
1132
1067
  }
1068
+ return []
1133
1069
  })
1134
1070
 
1135
1071
  /**
@@ -1164,34 +1100,6 @@ export const contains: {
1164
1100
  <A>(self: Iterable<A>, a: A): boolean
1165
1101
  } = containsWith(_equivalence)
1166
1102
 
1167
- /**
1168
- * Remove duplicates from a `NonEmptyReadonlyArray`, keeping the first occurrence of an element using the provided `isEquivalent` function.
1169
- *
1170
- * @since 2.0.0
1171
- */
1172
- export const dedupeNonEmptyWith: {
1173
- <A>(isEquivalent: (self: A, that: A) => boolean): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A>
1174
- <A>(self: NonEmptyReadonlyArray<A>, isEquivalent: (self: A, that: A) => boolean): NonEmptyArray<A>
1175
- } = dual(2, <A>(self: NonEmptyReadonlyArray<A>, isEquivalent: (self: A, that: A) => boolean): NonEmptyArray<A> => {
1176
- const out: NonEmptyArray<A> = [headNonEmpty(self)]
1177
- const rest = tailNonEmpty(self)
1178
- for (const a of rest) {
1179
- if (out.every((o) => !isEquivalent(a, o))) {
1180
- out.push(a)
1181
- }
1182
- }
1183
- return out
1184
- })
1185
-
1186
- /**
1187
- * Remove duplicates from a `NonEmptyReadonlyArray`, keeping the first occurrence of an element.
1188
- *
1189
- * @since 2.0.0
1190
- */
1191
- export const dedupeNonEmpty: <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A> = dedupeNonEmptyWith(
1192
- Equal.equivalence()
1193
- )
1194
-
1195
1103
  /**
1196
1104
  * A useful recursion pattern for processing an `Iterable` to produce a new `Array`, often used for "chopping" up the input
1197
1105
  * `Iterable`. Typically chop is called with some function that will consume an initial prefix of the `Iterable` and produce a
@@ -1202,7 +1110,11 @@ export const dedupeNonEmpty: <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArra
1202
1110
  export const chop: {
1203
1111
  <A, B>(
1204
1112
  f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
1205
- ): (self: Iterable<A>) => Array<B>
1113
+ ): <T extends ReadonlyArray<any> | Iterable<any>>(self: T) => ReadonlyArray.With<T, ReadonlyArray.Infer<T>>
1114
+ <A, B>(
1115
+ self: NonEmptyReadonlyArray<A>,
1116
+ f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
1117
+ ): NonEmptyArray<B>
1206
1118
  <A, B>(
1207
1119
  self: Iterable<A>,
1208
1120
  f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
@@ -1212,55 +1124,40 @@ export const chop: {
1212
1124
  f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
1213
1125
  ): Array<B> => {
1214
1126
  const input = fromIterable(self)
1215
- return isNonEmptyReadonlyArray(input) ? chopNonEmpty(input, f) : []
1216
- })
1217
-
1218
- /**
1219
- * A useful recursion pattern for processing a `NonEmptyReadonlyArray` to produce a new `NonEmptyReadonlyArray`, often used for "chopping" up the input
1220
- * `NonEmptyReadonlyArray`. Typically `chop` is called with some function that will consume an initial prefix of the `NonEmptyReadonlyArray` and produce a
1221
- * value and the tail of the `NonEmptyReadonlyArray`.
1222
- *
1223
- * @since 2.0.0
1224
- */
1225
- export const chopNonEmpty: {
1226
- <A, B>(
1227
- f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
1228
- ): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<B>
1229
- <A, B>(
1230
- self: NonEmptyReadonlyArray<A>,
1231
- f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
1232
- ): NonEmptyArray<B>
1233
- } = dual(2, <A, B>(
1234
- self: NonEmptyReadonlyArray<A>,
1235
- f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
1236
- ): NonEmptyArray<B> => {
1237
- const [b, rest] = f(self)
1238
- const out: NonEmptyArray<B> = [b]
1239
- let next: ReadonlyArray<A> = rest
1240
- while (readonlyArray.isNonEmptyArray(next)) {
1241
- const [b, rest] = f(next)
1242
- out.push(b)
1243
- next = rest
1127
+ if (isNonEmptyReadonlyArray(input)) {
1128
+ const [b, rest] = f(input)
1129
+ const out: NonEmptyArray<B> = [b]
1130
+ let next: ReadonlyArray<A> = rest
1131
+ while (readonlyArray.isNonEmptyArray(next)) {
1132
+ const [b, rest] = f(next)
1133
+ out.push(b)
1134
+ next = rest
1135
+ }
1136
+ return out
1244
1137
  }
1245
- return out
1138
+ return []
1246
1139
  })
1247
1140
 
1248
1141
  /**
1249
- * Splits an `Iterable` into two pieces, the first piece has max `n` elements.
1142
+ * Splits an `Iterable` into two segments, with the first segment containing a maximum of `n` elements.
1143
+ * The value of `n` can be `0`.
1250
1144
  *
1251
1145
  * @category getters
1252
1146
  * @since 2.0.0
1253
1147
  */
1254
1148
  export const splitAt: {
1255
- (n: number): <A>(self: Iterable<A>) => [Array<A>, Array<A>]
1256
- <A>(self: Iterable<A>, n: number): [Array<A>, Array<A>]
1149
+ (n: number): <A>(self: Iterable<A>) => [beforeIndex: Array<A>, fromIndex: Array<A>]
1150
+ <A>(self: Iterable<A>, n: number): [beforeIndex: Array<A>, fromIndex: Array<A>]
1257
1151
  } = dual(2, <A>(self: Iterable<A>, n: number): [Array<A>, Array<A>] => {
1258
1152
  const input = Array.from(self)
1259
- return n >= 1 && isNonEmptyReadonlyArray(input) ?
1260
- splitNonEmptyAt(input, n) :
1261
- isEmptyReadonlyArray(input) ?
1262
- [input, []] :
1263
- [[], input]
1153
+ const _n = Math.floor(n)
1154
+ if (isNonEmptyReadonlyArray(input)) {
1155
+ if (_n >= 1) {
1156
+ return splitNonEmptyAt(input, _n)
1157
+ }
1158
+ return [[], input]
1159
+ }
1160
+ return [input, []]
1264
1161
  })
1265
1162
 
1266
1163
  /**
@@ -1272,19 +1169,20 @@ export const copy: {
1272
1169
  } = (<A>(self: ReadonlyArray<A>): Array<A> => self.slice()) as any
1273
1170
 
1274
1171
  /**
1275
- * Splits a `NonEmptyReadonlyArray` into two pieces, the first piece has max `n` elements.
1172
+ * Splits a `NonEmptyReadonlyArray` into two segments, with the first segment containing a maximum of `n` elements.
1173
+ * The value of `n` must be `>= 1`.
1276
1174
  *
1277
1175
  * @category getters
1278
1176
  * @since 2.0.0
1279
1177
  */
1280
1178
  export const splitNonEmptyAt: {
1281
- (n: number): <A>(self: NonEmptyReadonlyArray<A>) => [NonEmptyArray<A>, Array<A>]
1282
- <A>(self: NonEmptyReadonlyArray<A>, n: number): [NonEmptyArray<A>, Array<A>]
1179
+ (n: number): <A>(self: NonEmptyReadonlyArray<A>) => [beforeIndex: NonEmptyArray<A>, fromIndex: Array<A>]
1180
+ <A>(self: NonEmptyReadonlyArray<A>, n: number): [beforeIndex: NonEmptyArray<A>, fromIndex: Array<A>]
1283
1181
  } = dual(2, <A>(self: NonEmptyReadonlyArray<A>, n: number): [NonEmptyArray<A>, Array<A>] => {
1284
- const m = Math.max(1, n)
1285
- return m >= self.length ?
1182
+ const _n = Math.max(1, Math.floor(n))
1183
+ return _n >= self.length ?
1286
1184
  [copy(self), []] :
1287
- [prepend(self.slice(1, m), headNonEmpty(self)), self.slice(m)]
1185
+ [prepend(self.slice(1, _n), headNonEmpty(self)), self.slice(_n)]
1288
1186
  })
1289
1187
 
1290
1188
  /**
@@ -1302,29 +1200,21 @@ export const splitNonEmptyAt: {
1302
1200
  * @since 2.0.0
1303
1201
  */
1304
1202
  export const chunksOf: {
1305
- (n: number): <A>(self: Iterable<A>) => Array<NonEmptyArray<A>>
1203
+ (
1204
+ n: number
1205
+ ): <T extends ReadonlyArray<any> | Iterable<any>>(
1206
+ self: T
1207
+ ) => ReadonlyArray.With<T, NonEmptyArray<ReadonlyArray.Infer<T>>>
1208
+ <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<NonEmptyArray<A>>
1306
1209
  <A>(self: Iterable<A>, n: number): Array<NonEmptyArray<A>>
1307
1210
  } = dual(2, <A>(self: Iterable<A>, n: number): Array<NonEmptyArray<A>> => {
1308
1211
  const input = fromIterable(self)
1309
- return isNonEmptyReadonlyArray(input) ? chunksOfNonEmpty(input, n) : []
1212
+ if (isNonEmptyReadonlyArray(input)) {
1213
+ return chop(input, splitNonEmptyAt(n))
1214
+ }
1215
+ return []
1310
1216
  })
1311
1217
 
1312
- /**
1313
- * Splits a `NonEmptyReadonlyArray` into length-`n` pieces. The last piece will be shorter if `n` does not evenly divide the length of
1314
- * the `NonEmptyReadonlyArray`.
1315
- *
1316
- * @category getters
1317
- * @since 2.0.0
1318
- */
1319
- export const chunksOfNonEmpty: {
1320
- (n: number): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<NonEmptyArray<A>>
1321
- <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<NonEmptyArray<A>>
1322
- } = dual(
1323
- 2,
1324
- <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<NonEmptyArray<A>> =>
1325
- chopNonEmpty(self, splitNonEmptyAt(n))
1326
- )
1327
-
1328
1218
  /**
1329
1219
  * Group equal, consecutive elements of a `NonEmptyReadonlyArray` into `NonEmptyArray`s using the provided `isEquivalent` function.
1330
1220
  *
@@ -1337,7 +1227,7 @@ export const groupWith: {
1337
1227
  } = dual(
1338
1228
  2,
1339
1229
  <A>(self: NonEmptyReadonlyArray<A>, isEquivalent: (self: A, that: A) => boolean): NonEmptyArray<NonEmptyArray<A>> =>
1340
- chopNonEmpty(self, (as) => {
1230
+ chop(self, (as) => {
1341
1231
  const h = headNonEmpty(as)
1342
1232
  const out: NonEmptyArray<A> = [h]
1343
1233
  let i = 1
@@ -1389,53 +1279,48 @@ export const groupBy: {
1389
1279
  /**
1390
1280
  * @since 2.0.0
1391
1281
  */
1392
- export const unionWith = <A>(isEquivalent: (self: A, that: A) => boolean): {
1393
- (that: Iterable<A>): (self: Iterable<A>) => Array<A>
1394
- (self: Iterable<A>, that: Iterable<A>): Array<A>
1395
- } =>
1396
- dual(2, (self: Iterable<A>, that: Iterable<A>): Array<A> => {
1397
- const a = fromIterable(self)
1398
- const b = fromIterable(that)
1399
- return isNonEmptyReadonlyArray(a) && isNonEmptyReadonlyArray(b) ?
1400
- unionNonEmptyWith(isEquivalent)(a, b) :
1401
- isNonEmptyReadonlyArray(a) ?
1402
- a :
1403
- b
1404
- })
1282
+ export const unionWith: {
1283
+ <S extends ReadonlyArray<any> | Iterable<any>, T extends ReadonlyArray<any> | Iterable<any>>(
1284
+ that: T,
1285
+ isEquivalent: (self: ReadonlyArray.Infer<S>, that: ReadonlyArray.Infer<T>) => boolean
1286
+ ): (self: S) => ReadonlyArray.With2<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
1287
+ <A, B>(
1288
+ self: NonEmptyReadonlyArray<A>,
1289
+ that: Iterable<B>,
1290
+ isEquivalent: (self: A, that: B) => boolean
1291
+ ): NonEmptyArray<A | B>
1292
+ <A, B>(
1293
+ self: Iterable<A>,
1294
+ that: NonEmptyReadonlyArray<B>,
1295
+ isEquivalent: (self: A, that: B) => boolean
1296
+ ): NonEmptyArray<A | B>
1297
+ <A, B>(self: Iterable<A>, that: Iterable<B>, isEquivalent: (self: A, that: B) => boolean): Array<A | B>
1298
+ } = dual(3, <A>(self: Iterable<A>, that: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A> => {
1299
+ const a = fromIterable(self)
1300
+ const b = fromIterable(that)
1301
+ if (isNonEmptyReadonlyArray(a)) {
1302
+ if (isNonEmptyReadonlyArray(b)) {
1303
+ const dedupe = dedupeWith(isEquivalent)
1304
+ return dedupe(appendAll(a, b))
1305
+ }
1306
+ return a
1307
+ }
1308
+ return b
1309
+ })
1405
1310
 
1406
1311
  /**
1407
1312
  * @since 2.0.0
1408
1313
  */
1409
1314
  export const union: {
1410
- <B>(that: Iterable<B>): <A>(self: Iterable<A>) => Array<A | B>
1315
+ <T extends ReadonlyArray<any> | Iterable<any>>(
1316
+ that: T
1317
+ ): <S extends ReadonlyArray<any> | Iterable<any>>(
1318
+ self: S
1319
+ ) => ReadonlyArray.With2<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
1320
+ <A, B>(self: NonEmptyReadonlyArray<A>, that: ReadonlyArray<B>): NonEmptyArray<A | B>
1321
+ <A, B>(self: ReadonlyArray<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<A | B>
1411
1322
  <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
1412
- } = unionWith(_equivalence)
1413
-
1414
- /**
1415
- * @since 2.0.0
1416
- */
1417
- export const unionNonEmptyWith = <A>(isEquivalent: (self: A, that: A) => boolean): {
1418
- (that: NonEmptyReadonlyArray<A>): (self: ReadonlyArray<A>) => NonEmptyArray<A>
1419
- (that: ReadonlyArray<A>): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A>
1420
- (self: ReadonlyArray<A>, that: NonEmptyReadonlyArray<A>): NonEmptyArray<A>
1421
- (self: NonEmptyReadonlyArray<A>, that: ReadonlyArray<A>): NonEmptyArray<A>
1422
- } => {
1423
- const dedupe = dedupeNonEmptyWith(isEquivalent)
1424
- return dual(
1425
- 2,
1426
- (self: NonEmptyReadonlyArray<A>, that: ReadonlyArray<A>): NonEmptyArray<A> => dedupe(appendAllNonEmpty(self, that))
1427
- )
1428
- }
1429
-
1430
- /**
1431
- * @since 2.0.0
1432
- */
1433
- export const unionNonEmpty: {
1434
- <A>(that: NonEmptyReadonlyArray<A>): (self: ReadonlyArray<A>) => NonEmptyArray<A>
1435
- <A>(that: ReadonlyArray<A>): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A>
1436
- <A>(self: ReadonlyArray<A>, that: NonEmptyReadonlyArray<A>): NonEmptyArray<A>
1437
- <A>(self: NonEmptyReadonlyArray<A>, that: ReadonlyArray<A>): NonEmptyArray<A>
1438
- } = unionNonEmptyWith(_equivalence)
1323
+ } = dual(2, <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B> => unionWith(self, that, _equivalence))
1439
1324
 
1440
1325
  /**
1441
1326
  * Creates an `Array` of unique values that are included in all given `Iterable`s using the provided `isEquivalent` function.
@@ -1483,7 +1368,7 @@ export const differenceWith = <A>(isEquivalent: (self: A, that: A) => boolean):
1483
1368
  }
1484
1369
 
1485
1370
  /**
1486
- * Creates a `Array` of values not included in the other given `Iterable` using the provided `isEquivalent` function.
1371
+ * Creates a `Array` of values not included in the other given `Iterable`.
1487
1372
  * The order and references of result values are determined by the first `Iterable`.
1488
1373
  *
1489
1374
  * @since 2.0.0
@@ -1514,13 +1399,24 @@ export declare namespace ReadonlyArray {
1514
1399
  /**
1515
1400
  * @since 2.0.0
1516
1401
  */
1517
- export type Infer<T extends ReadonlyArray<any>> = T[number]
1402
+ export type Infer<T extends ReadonlyArray<any> | Iterable<any>> = T extends ReadonlyArray<infer A> ? A
1403
+ : T extends Iterable<infer A> ? A
1404
+ : never
1518
1405
 
1519
1406
  /**
1520
1407
  * @since 2.0.0
1521
1408
  */
1522
- export type With<T extends ReadonlyArray<any>, A> = T extends NonEmptyReadonlyArray<any> ? NonEmptyArray<A>
1409
+ export type With<T extends ReadonlyArray<any> | Iterable<any>, A> = T extends NonEmptyReadonlyArray<any> ?
1410
+ NonEmptyArray<A>
1523
1411
  : Array<A>
1412
+
1413
+ /**
1414
+ * @since 2.0.0
1415
+ */
1416
+ export type With2<S extends ReadonlyArray<any> | Iterable<any>, T extends ReadonlyArray<any> | Iterable<any>, A> =
1417
+ S extends NonEmptyReadonlyArray<any> ? NonEmptyArray<A>
1418
+ : T extends NonEmptyReadonlyArray<any> ? NonEmptyArray<A>
1419
+ : Array<A>
1524
1420
  }
1525
1421
 
1526
1422
  /**
@@ -1535,11 +1431,16 @@ export const map: {
1535
1431
  } = dual(2, <A, B>(self: ReadonlyArray<A>, f: (a: A, i: number) => B): Array<B> => self.map(f))
1536
1432
 
1537
1433
  /**
1434
+ * Applies a function to each element in an array and returns a new array containing the concatenated mapped elements.
1435
+ *
1538
1436
  * @category sequencing
1539
1437
  * @since 2.0.0
1540
1438
  */
1541
1439
  export const flatMap: {
1542
- <A, B>(f: (a: A, i: number) => ReadonlyArray<B>): (self: ReadonlyArray<A>) => Array<B>
1440
+ <S extends ReadonlyArray<any>, T extends ReadonlyArray<any>>(
1441
+ f: (a: ReadonlyArray.Infer<S>, i: number) => T
1442
+ ): (self: S) => ReadonlyArray.With2<S, T, ReadonlyArray.Infer<T>>
1443
+ <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A, i: number) => NonEmptyReadonlyArray<B>): NonEmptyArray<B>
1543
1444
  <A, B>(self: ReadonlyArray<A>, f: (a: A, i: number) => ReadonlyArray<B>): Array<B>
1544
1445
  } = dual(
1545
1446
  2,
@@ -1556,27 +1457,15 @@ export const flatMap: {
1556
1457
  )
1557
1458
 
1558
1459
  /**
1460
+ * Flattens an array of arrays into a single array by concatenating all arrays.
1461
+ *
1559
1462
  * @category sequencing
1560
1463
  * @since 2.0.0
1561
1464
  */
1562
- export const flatMapNonEmpty: {
1563
- <A, B>(f: (a: A, i: number) => NonEmptyReadonlyArray<B>): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<B>
1564
- <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A, i: number) => NonEmptyReadonlyArray<B>): NonEmptyArray<B>
1565
- } = flatMap as any
1566
-
1567
- /**
1568
- * @category sequencing
1569
- * @since 2.0.0
1570
- */
1571
- export const flatten: <A>(self: ReadonlyArray<ReadonlyArray<A>>) => Array<A> = flatMap(identity)
1572
-
1573
- /**
1574
- * @category sequencing
1575
- * @since 2.0.0
1576
- */
1577
- export const flattenNonEmpty: <A>(
1578
- self: NonEmptyReadonlyArray<NonEmptyReadonlyArray<A>>
1579
- ) => NonEmptyArray<A> = flatMapNonEmpty(identity)
1465
+ export const flatten: {
1466
+ <A>(self: NonEmptyReadonlyArray<NonEmptyReadonlyArray<A>>): NonEmptyArray<A>
1467
+ <A>(self: ReadonlyArray<ReadonlyArray<A>>): Array<A>
1468
+ } = flatMap(identity) as any
1580
1469
 
1581
1470
  /**
1582
1471
  * @category filtering
@@ -1627,11 +1516,11 @@ export const filterMapWhile: {
1627
1516
  * @since 2.0.0
1628
1517
  */
1629
1518
  export const partitionMap: {
1630
- <A, B, C>(f: (a: A, i: number) => Either<B, C>): (self: Iterable<A>) => [Array<B>, Array<C>]
1631
- <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<B, C>): [Array<B>, Array<C>]
1519
+ <A, B, C>(f: (a: A, i: number) => Either<B, C>): (self: Iterable<A>) => [left: Array<B>, right: Array<C>]
1520
+ <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<B, C>): [left: Array<B>, right: Array<C>]
1632
1521
  } = dual(
1633
1522
  2,
1634
- <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<B, C>): [Array<B>, Array<C>] => {
1523
+ <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<B, C>): [left: Array<B>, right: Array<C>] => {
1635
1524
  const left: Array<B> = []
1636
1525
  const right: Array<C> = []
1637
1526
  const as = fromIterable(self)
@@ -1648,25 +1537,83 @@ export const partitionMap: {
1648
1537
  )
1649
1538
 
1650
1539
  /**
1540
+ * Retrieves the `Some` values from an `Iterable` of `Option`s, collecting them into an array.
1541
+ *
1542
+ * @example
1543
+ * import { getSomes } from "effect/ReadonlyArray"
1544
+ * import { some, none } from "effect/Option"
1545
+ *
1546
+ * assert.deepStrictEqual(
1547
+ * getSomes([some(1), none(), some(2)]),
1548
+ * [1, 2]
1549
+ * )
1550
+ *
1551
+ * @category filtering
1552
+ * @since 2.0.0
1553
+ */
1554
+ export const getSomes: <A>(self: Iterable<Option<A>>) => Array<A> = filterMap(identity)
1555
+
1556
+ /**
1557
+ * Retrieves the `Left` values from an `Iterable` of `Either`s, collecting them into an array.
1558
+ *
1559
+ * @example
1560
+ * import { getLefts } from "effect/ReadonlyArray"
1561
+ * import { right, left } from "effect/Either"
1562
+ *
1563
+ * assert.deepStrictEqual(
1564
+ * getLefts([right(1), left("err"), right(2)]),
1565
+ * ["err"]
1566
+ * )
1567
+ *
1651
1568
  * @category filtering
1652
1569
  * @since 2.0.0
1653
1570
  */
1654
- export const compact: <A>(self: Iterable<Option<A>>) => Array<A> = filterMap(identity)
1571
+ export const getLefts = <E, A>(self: Iterable<Either<E, A>>): Array<E> => {
1572
+ const out: Array<E> = []
1573
+ for (const a of self) {
1574
+ if (E.isLeft(a)) {
1575
+ out.push(a.left)
1576
+ }
1577
+ }
1578
+
1579
+ return out
1580
+ }
1581
+
1582
+ /**
1583
+ * Retrieves the `Right` values from an `Iterable` of `Either`s, collecting them into an array.
1584
+ *
1585
+ * @example
1586
+ * import { getRights } from "effect/ReadonlyArray"
1587
+ * import { right, left } from "effect/Either"
1588
+ *
1589
+ * assert.deepStrictEqual(
1590
+ * getRights([right(1), left("err"), right(2)]),
1591
+ * [1, 2]
1592
+ * )
1593
+ *
1594
+ * @category filtering
1595
+ * @since 2.0.0
1596
+ */
1597
+ export const getRights = <E, A>(self: Iterable<Either<E, A>>): Array<A> => {
1598
+ const out: Array<A> = []
1599
+ for (const a of self) {
1600
+ if (E.isRight(a)) {
1601
+ out.push(a.right)
1602
+ }
1603
+ }
1604
+
1605
+ return out
1606
+ }
1655
1607
 
1656
1608
  /**
1657
1609
  * @category filtering
1658
1610
  * @since 2.0.0
1659
1611
  */
1660
1612
  export const filter: {
1661
- <C extends A, B extends A, A = C>(
1662
- refinement: (a: A, i: number) => a is B
1663
- ): (self: Iterable<C>) => Array<B>
1664
- <B extends A, A = B>(predicate: (a: A, i: number) => boolean): (self: Iterable<B>) => Array<B>
1665
- <C extends A, B extends A, A = C>(
1666
- self: Iterable<C>,
1667
- refinement: (a: A, i: number) => a is B
1668
- ): Array<B>
1669
- <B extends A, A = B>(self: Iterable<B>, predicate: (a: A, i: number) => boolean): Array<B>
1613
+ <A, B extends A>(refinement: (a: A, i: number) => a is B): (self: Iterable<A>) => Array<B>
1614
+ <A, B extends A>(predicate: (b: B, i: number) => boolean): (self: Iterable<A>) => Array<A>
1615
+ <A, B extends A>(self: Iterable<A>, refinement: (a: A, i: number) => a is B): Array<B>
1616
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Array<A>
1670
1617
  } = dual(
1671
1618
  2,
1672
1619
  <B extends A, A = B>(self: Iterable<B>, predicate: (a: A, i: number) => boolean): Array<B> => {
@@ -1682,32 +1629,28 @@ export const filter: {
1682
1629
  )
1683
1630
 
1684
1631
  /**
1632
+ * Separate elements based on a predicate that also exposes the index of the element.
1633
+ *
1685
1634
  * @category filtering
1686
1635
  * @since 2.0.0
1687
1636
  */
1688
1637
  export const partition: {
1689
1638
  <C extends A, B extends A, A = C>(refinement: (a: A, i: number) => a is B): (
1690
1639
  self: Iterable<C>
1691
- ) => [Array<C>, Array<B>]
1640
+ ) => [excluded: Array<Exclude<C, B>>, satisfying: Array<B>]
1692
1641
  <B extends A, A = B>(
1693
1642
  predicate: (a: A, i: number) => boolean
1694
- ): (self: Iterable<B>) => [Array<B>, Array<B>]
1695
- <C extends A, B extends A, A = C>(
1696
- self: Iterable<C>,
1643
+ ): (self: Iterable<B>) => [excluded: Array<B>, satisfying: Array<B>]
1644
+ <A, B extends A>(
1645
+ self: Iterable<A>,
1697
1646
  refinement: (a: A, i: number) => a is B
1698
- ): [Array<C>, Array<B>]
1699
- <B extends A, A = B>(
1700
- self: Iterable<B>,
1701
- predicate: (a: A, i: number) => boolean
1702
- ): [Array<B>, Array<B>]
1647
+ ): [excluded: Array<Exclude<A, B>>, satisfying: Array<B>]
1648
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): [excluded: Array<A>, satisfying: Array<A>]
1703
1649
  } = dual(
1704
1650
  2,
1705
- <B extends A, A = B>(
1706
- self: Iterable<B>,
1707
- predicate: (a: A, i: number) => boolean
1708
- ): [Array<B>, Array<B>] => {
1709
- const left: Array<B> = []
1710
- const right: Array<B> = []
1651
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): [excluded: Array<A>, satisfying: Array<A>] => {
1652
+ const left: Array<A> = []
1653
+ const right: Array<A> = []
1711
1654
  const as = fromIterable(self)
1712
1655
  for (let i = 0; i < as.length; i++) {
1713
1656
  if (predicate(as[i], i)) {
@@ -1759,9 +1702,9 @@ export const reduceRight: {
1759
1702
  * @since 2.0.0
1760
1703
  */
1761
1704
  export const liftPredicate: {
1762
- <C extends A, B extends A, A = C>(refinement: Refinement<A, B>): (c: C) => Array<B>
1763
- <B extends A, A = B>(predicate: Predicate<A>): (b: B) => Array<B>
1764
- } = <B extends A, A = B>(predicate: Predicate<A>) => (b: B) => predicate(b) ? [b] : []
1705
+ <A, B extends A>(refinement: Refinement<A, B>): (a: A) => Array<B>
1706
+ <A>(predicate: Predicate<A>): <B extends A>(b: B) => Array<B>
1707
+ } = <A>(predicate: Predicate<A>) => <B extends A>(b: B): Array<B> => predicate(b) ? [b] : []
1765
1708
 
1766
1709
  /**
1767
1710
  * @category lifting
@@ -1788,7 +1731,7 @@ export const liftNullable = <A extends Array<unknown>, B>(
1788
1731
  (...a) => fromNullable(f(...a))
1789
1732
 
1790
1733
  /**
1791
- * @category combining
1734
+ * @category sequencing
1792
1735
  * @since 2.0.0
1793
1736
  */
1794
1737
  export const flatMapNullable: {
@@ -1836,8 +1779,8 @@ export const every: {
1836
1779
  * @since 2.0.0
1837
1780
  */
1838
1781
  export const some: {
1839
- <A>(predicate: Predicate<A>): <B extends A>(self: ReadonlyArray<B>) => self is NonEmptyReadonlyArray<B>
1840
- <B extends A, A = B>(self: ReadonlyArray<B>, predicate: Predicate<A>): self is NonEmptyReadonlyArray<B>
1782
+ <B extends A, A = B>(predicate: Predicate<A>): (self: ReadonlyArray<B>) => self is NonEmptyReadonlyArray<B>
1783
+ <A>(self: ReadonlyArray<A>, predicate: Predicate<A>): self is NonEmptyReadonlyArray<A>
1841
1784
  } = dual(
1842
1785
  2,
1843
1786
  <A>(self: ReadonlyArray<A>, predicate: Predicate<A>): self is NonEmptyReadonlyArray<A> => self.some(predicate)
@@ -1916,27 +1859,45 @@ export const forEach: {
1916
1859
  } = dual(2, <A>(self: Iterable<A>, f: (a: A, i: number) => void): void => fromIterable(self).forEach((a, i) => f(a, i)))
1917
1860
 
1918
1861
  /**
1919
- * Remove duplicates from am `Iterable` using the provided `isEquivalent` function, keeping the first occurrence of an element.
1862
+ * Remove duplicates from an `Iterable` using the provided `isEquivalent` function,
1863
+ * preserving the order of the first occurrence of each element.
1920
1864
  *
1921
1865
  * @since 2.0.0
1922
1866
  */
1923
1867
  export const dedupeWith: {
1924
- <A>(isEquivalent: (self: A, that: A) => boolean): (self: Iterable<A>) => Array<A>
1868
+ <A>(
1869
+ isEquivalent: (self: A, that: A) => boolean
1870
+ ): <T extends ReadonlyArray<any> | Iterable<any>>(self: T) => ReadonlyArray.With<T, ReadonlyArray.Infer<T>>
1871
+ <A>(self: NonEmptyReadonlyArray<A>, isEquivalent: (self: A, that: A) => boolean): NonEmptyArray<A>
1925
1872
  <A>(self: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A>
1926
1873
  } = dual(
1927
1874
  2,
1928
1875
  <A>(self: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A> => {
1929
1876
  const input = fromIterable(self)
1930
- return isNonEmptyReadonlyArray(input) ? dedupeNonEmptyWith(isEquivalent)(input) : []
1877
+ if (isNonEmptyReadonlyArray(input)) {
1878
+ const out: NonEmptyArray<A> = [headNonEmpty(input)]
1879
+ const rest = tailNonEmpty(input)
1880
+ for (const r of rest) {
1881
+ if (out.every((a) => !isEquivalent(r, a))) {
1882
+ out.push(r)
1883
+ }
1884
+ }
1885
+ return out
1886
+ }
1887
+ return []
1931
1888
  }
1932
1889
  )
1933
1890
 
1934
1891
  /**
1935
- * Remove duplicates from am `Iterable`, keeping the first occurrence of an element.
1892
+ * Remove duplicates from an `Iterable`, preserving the order of the first occurrence of each element.
1893
+ * The equivalence used to compare elements is provided by `Equal.equivalence()` from the `Equal` module.
1936
1894
  *
1937
1895
  * @since 2.0.0
1938
1896
  */
1939
- export const dedupe: <A>(self: Iterable<A>) => Array<A> = dedupeWith(Equal.equivalence())
1897
+ export const dedupe: {
1898
+ <A>(self: NonEmptyReadonlyArray<A>): NonEmptyArray<A>
1899
+ <A>(self: Iterable<A>): Array<A>
1900
+ } = dedupeWith(Equal.equivalence()) as any
1940
1901
 
1941
1902
  /**
1942
1903
  * Deduplicates adjacent elements that are identical using the provided `isEquivalent` function.
@@ -1983,9 +1944,9 @@ export const join: {
1983
1944
  * @category folding
1984
1945
  */
1985
1946
  export const mapAccum: {
1986
- <S, A, B>(s: S, f: (s: S, a: A) => readonly [S, B]): (self: Iterable<A>) => [S, Array<B>]
1987
- <S, A, B>(self: Iterable<A>, s: S, f: (s: S, a: A) => readonly [S, B]): [S, Array<B>]
1988
- } = dual(3, <S, A, B>(self: Iterable<A>, s: S, f: (s: S, a: A) => [S, B]) => {
1947
+ <S, A, B>(s: S, f: (s: S, a: A) => readonly [S, B]): (self: Iterable<A>) => [state: S, mappedArray: Array<B>]
1948
+ <S, A, B>(self: Iterable<A>, s: S, f: (s: S, a: A) => readonly [S, B]): [state: S, mappedArray: Array<B>]
1949
+ } = dual(3, <S, A, B>(self: Iterable<A>, s: S, f: (s: S, a: A) => [S, B]): [state: S, mappedArray: Array<B>] => {
1989
1950
  let s1 = s
1990
1951
  const out: Array<B> = []
1991
1952
  for (const a of self) {