effect 2.3.8 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/dist/cjs/BigInt.js +14 -1
  2. package/dist/cjs/BigInt.js.map +1 -1
  3. package/dist/cjs/Effect.js +48 -61
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Either.js +35 -6
  6. package/dist/cjs/Either.js.map +1 -1
  7. package/dist/cjs/Equal.js +1 -1
  8. package/dist/cjs/Equal.js.map +1 -1
  9. package/dist/cjs/Exit.js +1 -1
  10. package/dist/cjs/Number.js +25 -1
  11. package/dist/cjs/Number.js.map +1 -1
  12. package/dist/cjs/Predicate.js +40 -3
  13. package/dist/cjs/Predicate.js.map +1 -1
  14. package/dist/cjs/ReadonlyArray.js +2 -2
  15. package/dist/cjs/ReadonlyArray.js.map +1 -1
  16. package/dist/cjs/ReadonlyRecord.js +71 -76
  17. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  18. package/dist/cjs/STM.js.map +1 -1
  19. package/dist/cjs/Schedule.js.map +1 -1
  20. package/dist/cjs/Sink.js.map +1 -1
  21. package/dist/cjs/Stream.js +3 -23
  22. package/dist/cjs/Stream.js.map +1 -1
  23. package/dist/cjs/Struct.js +3 -1
  24. package/dist/cjs/Struct.js.map +1 -1
  25. package/dist/cjs/TestAnnotation.js.map +1 -1
  26. package/dist/cjs/internal/channel/channelExecutor.js +5 -5
  27. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  28. package/dist/cjs/internal/channel/channelState.js +5 -5
  29. package/dist/cjs/internal/channel/channelState.js.map +1 -1
  30. package/dist/cjs/internal/channel.js.map +1 -1
  31. package/dist/cjs/internal/clock.js +3 -4
  32. package/dist/cjs/internal/clock.js.map +1 -1
  33. package/dist/cjs/internal/core-effect.js +6 -23
  34. package/dist/cjs/internal/core-effect.js.map +1 -1
  35. package/dist/cjs/internal/core.js +11 -27
  36. package/dist/cjs/internal/core.js.map +1 -1
  37. package/dist/cjs/internal/effect/circular.js +4 -5
  38. package/dist/cjs/internal/effect/circular.js.map +1 -1
  39. package/dist/cjs/internal/either.js +3 -3
  40. package/dist/cjs/internal/either.js.map +1 -1
  41. package/dist/cjs/internal/groupBy.js.map +1 -1
  42. package/dist/cjs/internal/layer.js +0 -2
  43. package/dist/cjs/internal/layer.js.map +1 -1
  44. package/dist/cjs/internal/runtime.js +12 -1
  45. package/dist/cjs/internal/runtime.js.map +1 -1
  46. package/dist/cjs/internal/schedule.js +4 -4
  47. package/dist/cjs/internal/schedule.js.map +1 -1
  48. package/dist/cjs/internal/sink.js +0 -2
  49. package/dist/cjs/internal/sink.js.map +1 -1
  50. package/dist/cjs/internal/stm/stm.js +1 -0
  51. package/dist/cjs/internal/stm/stm.js.map +1 -1
  52. package/dist/cjs/internal/stream.js +51 -64
  53. package/dist/cjs/internal/stream.js.map +1 -1
  54. package/dist/cjs/internal/version.js +1 -1
  55. package/dist/dts/BigInt.d.ts +7 -0
  56. package/dist/dts/BigInt.d.ts.map +1 -1
  57. package/dist/dts/Brand.d.ts +1 -1
  58. package/dist/dts/Brand.d.ts.map +1 -1
  59. package/dist/dts/Cause.d.ts +1 -1
  60. package/dist/dts/Cause.d.ts.map +1 -1
  61. package/dist/dts/Channel.d.ts +11 -11
  62. package/dist/dts/Channel.d.ts.map +1 -1
  63. package/dist/dts/Chunk.d.ts +3 -3
  64. package/dist/dts/Config.d.ts +4 -4
  65. package/dist/dts/Config.d.ts.map +1 -1
  66. package/dist/dts/Cron.d.ts +1 -1
  67. package/dist/dts/Cron.d.ts.map +1 -1
  68. package/dist/dts/Differ.d.ts +2 -2
  69. package/dist/dts/Differ.d.ts.map +1 -1
  70. package/dist/dts/Effect.d.ts +84 -108
  71. package/dist/dts/Effect.d.ts.map +1 -1
  72. package/dist/dts/Either.d.ts +126 -83
  73. package/dist/dts/Either.d.ts.map +1 -1
  74. package/dist/dts/Encoding.d.ts +6 -6
  75. package/dist/dts/Encoding.d.ts.map +1 -1
  76. package/dist/dts/Equal.d.ts.map +1 -1
  77. package/dist/dts/Exit.d.ts +2 -2
  78. package/dist/dts/Fiber.d.ts +2 -2
  79. package/dist/dts/Fiber.d.ts.map +1 -1
  80. package/dist/dts/GroupBy.d.ts +12 -12
  81. package/dist/dts/GroupBy.d.ts.map +1 -1
  82. package/dist/dts/Layer.d.ts +26 -26
  83. package/dist/dts/Layer.d.ts.map +1 -1
  84. package/dist/dts/List.d.ts +2 -2
  85. package/dist/dts/Logger.d.ts +4 -4
  86. package/dist/dts/Match.d.ts +2 -2
  87. package/dist/dts/Match.d.ts.map +1 -1
  88. package/dist/dts/MergeDecision.d.ts +1 -1
  89. package/dist/dts/MergeState.d.ts +5 -5
  90. package/dist/dts/MergeState.d.ts.map +1 -1
  91. package/dist/dts/Metric.d.ts +13 -13
  92. package/dist/dts/Metric.d.ts.map +1 -1
  93. package/dist/dts/MetricPolling.d.ts +4 -4
  94. package/dist/dts/MetricPolling.d.ts.map +1 -1
  95. package/dist/dts/Number.d.ts +8 -0
  96. package/dist/dts/Number.d.ts.map +1 -1
  97. package/dist/dts/Option.d.ts +11 -11
  98. package/dist/dts/Predicate.d.ts +37 -2
  99. package/dist/dts/Predicate.d.ts.map +1 -1
  100. package/dist/dts/ReadonlyArray.d.ts +9 -8
  101. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  102. package/dist/dts/ReadonlyRecord.d.ts +111 -94
  103. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  104. package/dist/dts/Reloadable.d.ts +4 -4
  105. package/dist/dts/Reloadable.d.ts.map +1 -1
  106. package/dist/dts/RequestResolver.d.ts +13 -13
  107. package/dist/dts/RequestResolver.d.ts.map +1 -1
  108. package/dist/dts/Resource.d.ts +1 -1
  109. package/dist/dts/Resource.d.ts.map +1 -1
  110. package/dist/dts/STM.d.ts +144 -139
  111. package/dist/dts/STM.d.ts.map +1 -1
  112. package/dist/dts/Schedule.d.ts +171 -179
  113. package/dist/dts/Schedule.d.ts.map +1 -1
  114. package/dist/dts/SingleProducerAsyncInput.d.ts +1 -1
  115. package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -1
  116. package/dist/dts/Sink.d.ts +13 -13
  117. package/dist/dts/Sink.d.ts.map +1 -1
  118. package/dist/dts/Stream.d.ts +355 -366
  119. package/dist/dts/Stream.d.ts.map +1 -1
  120. package/dist/dts/Struct.d.ts +3 -3
  121. package/dist/dts/Struct.d.ts.map +1 -1
  122. package/dist/dts/SubscriptionRef.d.ts +2 -2
  123. package/dist/dts/TArray.d.ts +2 -2
  124. package/dist/dts/TDeferred.d.ts +3 -3
  125. package/dist/dts/TMap.d.ts +10 -10
  126. package/dist/dts/TSet.d.ts +4 -4
  127. package/dist/dts/Take.d.ts +2 -2
  128. package/dist/dts/TestAnnotation.d.ts +2 -2
  129. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  130. package/dist/dts/Types.d.ts +7 -0
  131. package/dist/dts/Types.d.ts.map +1 -1
  132. package/dist/dts/internal/stm/stm.d.ts +2 -15
  133. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  134. package/dist/esm/BigInt.js +12 -0
  135. package/dist/esm/BigInt.js.map +1 -1
  136. package/dist/esm/Effect.js +45 -58
  137. package/dist/esm/Effect.js.map +1 -1
  138. package/dist/esm/Either.js +42 -5
  139. package/dist/esm/Either.js.map +1 -1
  140. package/dist/esm/Equal.js +1 -1
  141. package/dist/esm/Equal.js.map +1 -1
  142. package/dist/esm/Exit.js +1 -1
  143. package/dist/esm/Number.js +23 -0
  144. package/dist/esm/Number.js.map +1 -1
  145. package/dist/esm/Predicate.js +37 -2
  146. package/dist/esm/Predicate.js.map +1 -1
  147. package/dist/esm/ReadonlyArray.js +2 -2
  148. package/dist/esm/ReadonlyArray.js.map +1 -1
  149. package/dist/esm/ReadonlyRecord.js +70 -75
  150. package/dist/esm/ReadonlyRecord.js.map +1 -1
  151. package/dist/esm/STM.js.map +1 -1
  152. package/dist/esm/Schedule.js.map +1 -1
  153. package/dist/esm/Sink.js.map +1 -1
  154. package/dist/esm/Stream.js +5 -22
  155. package/dist/esm/Stream.js.map +1 -1
  156. package/dist/esm/Struct.js +3 -1
  157. package/dist/esm/Struct.js.map +1 -1
  158. package/dist/esm/TestAnnotation.js.map +1 -1
  159. package/dist/esm/internal/channel/channelExecutor.js +5 -5
  160. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  161. package/dist/esm/internal/channel/channelState.js +3 -3
  162. package/dist/esm/internal/channel/channelState.js.map +1 -1
  163. package/dist/esm/internal/channel.js.map +1 -1
  164. package/dist/esm/internal/clock.js +3 -4
  165. package/dist/esm/internal/clock.js.map +1 -1
  166. package/dist/esm/internal/core-effect.js +4 -20
  167. package/dist/esm/internal/core-effect.js.map +1 -1
  168. package/dist/esm/internal/core.js +8 -22
  169. package/dist/esm/internal/core.js.map +1 -1
  170. package/dist/esm/internal/effect/circular.js +4 -5
  171. package/dist/esm/internal/effect/circular.js.map +1 -1
  172. package/dist/esm/internal/either.js +3 -3
  173. package/dist/esm/internal/either.js.map +1 -1
  174. package/dist/esm/internal/groupBy.js.map +1 -1
  175. package/dist/esm/internal/layer.js +0 -2
  176. package/dist/esm/internal/layer.js.map +1 -1
  177. package/dist/esm/internal/runtime.js +12 -1
  178. package/dist/esm/internal/runtime.js.map +1 -1
  179. package/dist/esm/internal/schedule.js +4 -4
  180. package/dist/esm/internal/schedule.js.map +1 -1
  181. package/dist/esm/internal/sink.js +0 -2
  182. package/dist/esm/internal/sink.js.map +1 -1
  183. package/dist/esm/internal/stm/stm.js +1 -0
  184. package/dist/esm/internal/stm/stm.js.map +1 -1
  185. package/dist/esm/internal/stream.js +49 -59
  186. package/dist/esm/internal/stream.js.map +1 -1
  187. package/dist/esm/internal/version.js +1 -1
  188. package/package.json +1 -1
  189. package/src/BigInt.ts +13 -0
  190. package/src/Brand.ts +4 -4
  191. package/src/Cause.ts +1 -1
  192. package/src/Channel.ts +17 -17
  193. package/src/Chunk.ts +4 -4
  194. package/src/Config.ts +4 -4
  195. package/src/Cron.ts +2 -2
  196. package/src/Differ.ts +2 -2
  197. package/src/Effect.ts +100 -145
  198. package/src/Either.ts +215 -133
  199. package/src/Encoding.ts +3 -3
  200. package/src/Equal.ts +1 -1
  201. package/src/Exit.ts +2 -2
  202. package/src/Fiber.ts +2 -2
  203. package/src/GroupBy.ts +16 -16
  204. package/src/Layer.ts +32 -32
  205. package/src/List.ts +3 -3
  206. package/src/Logger.ts +4 -4
  207. package/src/Match.ts +3 -3
  208. package/src/MergeDecision.ts +1 -1
  209. package/src/MergeState.ts +8 -8
  210. package/src/Metric.ts +13 -13
  211. package/src/MetricPolling.ts +9 -9
  212. package/src/Number.ts +26 -0
  213. package/src/Option.ts +17 -17
  214. package/src/Predicate.ts +39 -2
  215. package/src/ReadonlyArray.ts +23 -15
  216. package/src/ReadonlyRecord.ts +421 -265
  217. package/src/Reloadable.ts +4 -4
  218. package/src/RequestResolver.ts +19 -19
  219. package/src/Resource.ts +3 -3
  220. package/src/STM.ts +166 -213
  221. package/src/Schedule.ts +331 -361
  222. package/src/SingleProducerAsyncInput.ts +1 -1
  223. package/src/Sink.ts +19 -19
  224. package/src/Stream.ts +449 -456
  225. package/src/Struct.ts +8 -5
  226. package/src/SubscriptionRef.ts +2 -2
  227. package/src/TArray.ts +2 -2
  228. package/src/TDeferred.ts +4 -4
  229. package/src/TMap.ts +10 -10
  230. package/src/TSet.ts +4 -4
  231. package/src/Take.ts +4 -4
  232. package/src/TestAnnotation.ts +5 -8
  233. package/src/Types.ts +11 -0
  234. package/src/internal/blockedRequests.ts +2 -2
  235. package/src/internal/cause.ts +2 -2
  236. package/src/internal/channel/channelExecutor.ts +26 -26
  237. package/src/internal/channel/channelState.ts +13 -13
  238. package/src/internal/channel/mergeDecision.ts +1 -1
  239. package/src/internal/channel/mergeState.ts +6 -6
  240. package/src/internal/channel/singleProducerAsyncInput.ts +5 -5
  241. package/src/internal/channel.ts +43 -43
  242. package/src/internal/clock.ts +3 -4
  243. package/src/internal/config.ts +7 -7
  244. package/src/internal/configError.ts +1 -1
  245. package/src/internal/configProvider/pathPatch.ts +2 -2
  246. package/src/internal/configProvider.ts +1 -1
  247. package/src/internal/core-effect.ts +28 -43
  248. package/src/internal/core.ts +15 -40
  249. package/src/internal/dataSource.ts +26 -26
  250. package/src/internal/differ/orPatch.ts +7 -7
  251. package/src/internal/differ.ts +2 -2
  252. package/src/internal/effect/circular.ts +9 -10
  253. package/src/internal/either.ts +25 -22
  254. package/src/internal/encoding/base64.ts +1 -1
  255. package/src/internal/encoding/base64Url.ts +1 -1
  256. package/src/internal/encoding/hex.ts +1 -1
  257. package/src/internal/fiber.ts +2 -2
  258. package/src/internal/fiberRuntime.ts +9 -9
  259. package/src/internal/groupBy.ts +40 -40
  260. package/src/internal/layer/circular.ts +4 -4
  261. package/src/internal/layer.ts +52 -54
  262. package/src/internal/matcher.ts +5 -5
  263. package/src/internal/metric/polling.ts +8 -8
  264. package/src/internal/metric.ts +6 -6
  265. package/src/internal/reloadable.ts +4 -4
  266. package/src/internal/resource.ts +2 -2
  267. package/src/internal/runtime.ts +32 -19
  268. package/src/internal/schedule.ts +430 -500
  269. package/src/internal/sink.ts +27 -29
  270. package/src/internal/stm/core.ts +23 -23
  271. package/src/internal/stm/stm.ts +158 -157
  272. package/src/internal/stm/tArray.ts +3 -3
  273. package/src/internal/stm/tDeferred.ts +5 -5
  274. package/src/internal/stm/tMap.ts +13 -13
  275. package/src/internal/stm/tSet.ts +4 -4
  276. package/src/internal/stream.ts +688 -723
  277. package/src/internal/subscriptionRef.ts +3 -3
  278. package/src/internal/take.ts +6 -6
  279. package/src/internal/version.ts +1 -1
package/src/Option.ts CHANGED
@@ -255,7 +255,7 @@ export const fromIterable = <A>(collection: Iterable<A>): Option<A> => {
255
255
  * @category conversions
256
256
  * @since 2.0.0
257
257
  */
258
- export const getRight: <E, A>(self: Either<E, A>) => Option<A> = either.getRight
258
+ export const getRight: <R, L>(self: Either<R, L>) => Option<R> = either.getRight
259
259
 
260
260
  /**
261
261
  * Converts a `Either` to an `Option` discarding the value.
@@ -270,7 +270,7 @@ export const getRight: <E, A>(self: Either<E, A>) => Option<A> = either.getRight
270
270
  * @category conversions
271
271
  * @since 2.0.0
272
272
  */
273
- export const getLeft: <E, A>(self: Either<E, A>) => Option<E> = either.getLeft
273
+ export const getLeft: <R, L>(self: Either<R, L>) => Option<L> = either.getLeft
274
274
 
275
275
  /**
276
276
  * Returns the value of the `Option` if it is `Some`, otherwise returns `onNone`
@@ -395,11 +395,11 @@ export const orElseSome: {
395
395
  * @since 2.0.0
396
396
  */
397
397
  export const orElseEither: {
398
- <B>(that: LazyArg<Option<B>>): <A>(self: Option<A>) => Option<Either<A, B>>
399
- <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<Either<A, B>>
398
+ <B>(that: LazyArg<Option<B>>): <A>(self: Option<A>) => Option<Either<B, A>>
399
+ <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<Either<B, A>>
400
400
  } = dual(
401
401
  2,
402
- <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<Either<A, B>> =>
402
+ <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<Either<B, A>> =>
403
403
  isNone(self) ? map(that(), either.right) : map(self, either.left)
404
404
  )
405
405
 
@@ -607,8 +607,8 @@ export const map: {
607
607
  * @since 2.0.0
608
608
  */
609
609
  export const as: {
610
- <B>(b: B): <_>(self: Option<_>) => Option<B>
611
- } = dual(2, <_, B>(self: Option<_>, b: B): Option<B> => map(self, () => b))
610
+ <B>(b: B): <X>(self: Option<X>) => Option<B>
611
+ } = dual(2, <X, B>(self: Option<X>, b: B): Option<B> => map(self, () => b))
612
612
 
613
613
  /**
614
614
  * Maps the `Some` value of this `Option` to the `void` constant value.
@@ -724,8 +724,8 @@ export const flatten: <A>(self: Option<Option<A>>) => Option<A> = flatMap(identi
724
724
  */
725
725
  export const zipRight: {
726
726
  <B>(that: Option<B>): <_>(self: Option<_>) => Option<B>
727
- <_, B>(self: Option<_>, that: Option<B>): Option<B>
728
- } = dual(2, <_, B>(self: Option<_>, that: Option<B>): Option<B> => flatMap(self, () => that))
727
+ <X, B>(self: Option<X>, that: Option<B>): Option<B>
728
+ } = dual(2, <X, B>(self: Option<X>, that: Option<B>): Option<B> => flatMap(self, () => that))
729
729
 
730
730
  /**
731
731
  * @category sequencing
@@ -749,8 +749,8 @@ export const composeK: {
749
749
  */
750
750
  export const zipLeft: {
751
751
  <_>(that: Option<_>): <A>(self: Option<A>) => Option<A>
752
- <A, _>(self: Option<A>, that: Option<_>): Option<A>
753
- } = dual(2, <A, _>(self: Option<A>, that: Option<_>): Option<A> => tap(self, () => that))
752
+ <A, X>(self: Option<A>, that: Option<X>): Option<A>
753
+ } = dual(2, <A, X>(self: Option<A>, that: Option<X>): Option<A> => tap(self, () => that))
754
754
 
755
755
  /**
756
756
  * Applies the provided function `f` to the value of the `Option` if it is `Some` and returns the original `Option`
@@ -774,9 +774,9 @@ export const zipLeft: {
774
774
  * @since 2.0.0
775
775
  */
776
776
  export const tap: {
777
- <A, _>(f: (a: A) => Option<_>): (self: Option<A>) => Option<A>
778
- <A, _>(self: Option<A>, f: (a: A) => Option<_>): Option<A>
779
- } = dual(2, <A, _>(self: Option<A>, f: (a: A) => Option<_>): Option<A> => flatMap(self, (a) => map(f(a), () => a)))
777
+ <A, X>(f: (a: A) => Option<X>): (self: Option<A>) => Option<A>
778
+ <A, X>(self: Option<A>, f: (a: A) => Option<X>): Option<A>
779
+ } = dual(2, <A, X>(self: Option<A>, f: (a: A) => Option<X>): Option<A> => flatMap(self, (a) => map(f(a), () => a)))
780
780
 
781
781
  /**
782
782
  * @category combining
@@ -955,11 +955,11 @@ export const toArray = <A>(self: Option<A>): Array<A> => isNone(self) ? [] : [se
955
955
  * @since 2.0.0
956
956
  */
957
957
  export const partitionMap: {
958
- <A, B, C>(f: (a: A) => Either<B, C>): (self: Option<A>) => [left: Option<B>, right: Option<C>]
959
- <A, B, C>(self: Option<A>, f: (a: A) => Either<B, C>): [left: Option<B>, right: Option<C>]
958
+ <A, B, C>(f: (a: A) => Either<C, B>): (self: Option<A>) => [left: Option<B>, right: Option<C>]
959
+ <A, B, C>(self: Option<A>, f: (a: A) => Either<C, B>): [left: Option<B>, right: Option<C>]
960
960
  } = dual(2, <A, B, C>(
961
961
  self: Option<A>,
962
- f: (a: A) => Either<B, C>
962
+ f: (a: A) => Either<C, B>
963
963
  ): [excluded: Option<B>, satisfying: Option<C>] => {
964
964
  if (isNone(self)) {
965
965
  return [none(), none()]
package/src/Predicate.ts CHANGED
@@ -53,6 +53,43 @@ export const mapInput: {
53
53
  <A, B>(self: Predicate<A>, f: (b: B) => A): Predicate<B>
54
54
  } = dual(2, <A, B>(self: Predicate<A>, f: (b: B) => A): Predicate<B> => (b) => self(f(b)))
55
55
 
56
+ /**
57
+ * Tests if a value is a `Set`.
58
+ *
59
+ * @param input - The value to test.
60
+ *
61
+ * @example
62
+ * import { isSet } from "effect/Predicate"
63
+ *
64
+ * assert.deepStrictEqual(isSet(new Set([1, 2])), true)
65
+ * assert.deepStrictEqual(isSet(new Set()), true)
66
+ * assert.deepStrictEqual(isSet({}), false)
67
+ * assert.deepStrictEqual(isSet(null), false)
68
+ * assert.deepStrictEqual(isSet(undefined), false)
69
+ *
70
+ * @category guards
71
+ * @since 2.0.0
72
+ */
73
+ export const isSet = (input: unknown): input is Set<unknown> => input instanceof Set
74
+
75
+ /**
76
+ * Tests if a value is a `Map`.
77
+ *
78
+ * @param input - The value to test.
79
+ *
80
+ * @example
81
+ * import { isMap } from "effect/Predicate"
82
+ *
83
+ * assert.deepStrictEqual(isMap(new Map()), true)
84
+ * assert.deepStrictEqual(isMap({}), false)
85
+ * assert.deepStrictEqual(isMap(null), false)
86
+ * assert.deepStrictEqual(isMap(undefined), false)
87
+ *
88
+ * @category guards
89
+ * @since 2.0.0
90
+ */
91
+ export const isMap = (input: unknown): input is Map<unknown, unknown> => input instanceof Map
92
+
56
93
  /**
57
94
  * Tests if a value is a `string`.
58
95
  *
@@ -192,7 +229,7 @@ export const isUndefined = (input: unknown): input is undefined => input === und
192
229
  export const isNotUndefined = <A>(input: A): input is Exclude<A, undefined> => input !== undefined
193
230
 
194
231
  /**
195
- * Tests if a value is `undefined`.
232
+ * Tests if a value is `null`.
196
233
  *
197
234
  * @param input - The value to test.
198
235
  *
@@ -210,7 +247,7 @@ export const isNotUndefined = <A>(input: A): input is Exclude<A, undefined> => i
210
247
  export const isNull = (input: unknown): input is null => input === null
211
248
 
212
249
  /**
213
- * Tests if a value is not `undefined`.
250
+ * Tests if a value is not `null`.
214
251
  *
215
252
  * @param input - The value to test.
216
253
  *
@@ -17,7 +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 { isBoolean } from "./Predicate.js"
20
- import * as RR from "./ReadonlyRecord.js"
20
+ import * as ReadonlyRecord from "./ReadonlyRecord.js"
21
21
  import * as Tuple from "./Tuple.js"
22
22
  import type { NoInfer } from "./Types.js"
23
23
 
@@ -128,7 +128,7 @@ export const fromIterable = <A>(collection: Iterable<A>): Array<A> =>
128
128
  * @category conversions
129
129
  * @since 2.0.0
130
130
  */
131
- export const fromRecord: <K extends string, A>(self: Readonly<Record<K, A>>) => Array<[K, A]> = RR.toEntries
131
+ export const fromRecord: <K extends string, A>(self: Readonly<Record<K, A>>) => Array<[K, A]> = ReadonlyRecord.toEntries
132
132
 
133
133
  /**
134
134
  * @category conversions
@@ -1334,10 +1334,18 @@ export const group: <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<NonEmpt
1334
1334
  * @since 2.0.0
1335
1335
  */
1336
1336
  export const groupBy: {
1337
- <A>(f: (a: A) => string): (self: Iterable<A>) => Record<string, NonEmptyArray<A>>
1338
- <A>(self: Iterable<A>, f: (a: A) => string): Record<string, NonEmptyArray<A>>
1339
- } = dual(2, <A>(self: Iterable<A>, f: (a: A) => string): Record<string, NonEmptyArray<A>> => {
1340
- const out: Record<string, NonEmptyArray<A>> = {}
1337
+ <A, K extends string | symbol>(
1338
+ f: (a: A) => K
1339
+ ): (self: Iterable<A>) => Record<ReadonlyRecord.ReadonlyRecord.NonLiteralKey<K>, NonEmptyArray<A>>
1340
+ <A, K extends string | symbol>(
1341
+ self: Iterable<A>,
1342
+ f: (a: A) => K
1343
+ ): Record<ReadonlyRecord.ReadonlyRecord.NonLiteralKey<K>, NonEmptyArray<A>>
1344
+ } = dual(2, <A, K extends string | symbol>(
1345
+ self: Iterable<A>,
1346
+ f: (a: A) => K
1347
+ ): Record<ReadonlyRecord.ReadonlyRecord.NonLiteralKey<K>, NonEmptyArray<A>> => {
1348
+ const out: Record<string | symbol, NonEmptyArray<A>> = {}
1341
1349
  for (const a of self) {
1342
1350
  const k = f(a)
1343
1351
  if (Object.prototype.hasOwnProperty.call(out, k)) {
@@ -1615,11 +1623,11 @@ export const filterMapWhile: {
1615
1623
  * @since 2.0.0
1616
1624
  */
1617
1625
  export const partitionMap: {
1618
- <A, B, C>(f: (a: A, i: number) => Either<B, C>): (self: Iterable<A>) => [left: Array<B>, right: Array<C>]
1619
- <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<B, C>): [left: Array<B>, right: Array<C>]
1626
+ <A, B, C>(f: (a: A, i: number) => Either<C, B>): (self: Iterable<A>) => [left: Array<B>, right: Array<C>]
1627
+ <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<C, B>): [left: Array<B>, right: Array<C>]
1620
1628
  } = dual(
1621
1629
  2,
1622
- <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<B, C>): [left: Array<B>, right: Array<C>] => {
1630
+ <A, B, C>(self: Iterable<A>, f: (a: A, i: number) => Either<C, B>): [left: Array<B>, right: Array<C>] => {
1623
1631
  const left: Array<B> = []
1624
1632
  const right: Array<C> = []
1625
1633
  const as = fromIterable(self)
@@ -1667,8 +1675,8 @@ export const getSomes: <A>(self: Iterable<Option<A>>) => Array<A> = filterMap(id
1667
1675
  * @category filtering
1668
1676
  * @since 2.0.0
1669
1677
  */
1670
- export const getLefts = <E, A>(self: Iterable<Either<E, A>>): Array<E> => {
1671
- const out: Array<E> = []
1678
+ export const getLefts = <R, L>(self: Iterable<Either<R, L>>): Array<L> => {
1679
+ const out: Array<L> = []
1672
1680
  for (const a of self) {
1673
1681
  if (E.isLeft(a)) {
1674
1682
  out.push(a.left)
@@ -1693,8 +1701,8 @@ export const getLefts = <E, A>(self: Iterable<Either<E, A>>): Array<E> => {
1693
1701
  * @category filtering
1694
1702
  * @since 2.0.0
1695
1703
  */
1696
- export const getRights = <E, A>(self: Iterable<Either<E, A>>): Array<A> => {
1697
- const out: Array<A> = []
1704
+ export const getRights = <R, L>(self: Iterable<Either<R, L>>): Array<R> => {
1705
+ const out: Array<R> = []
1698
1706
  for (const a of self) {
1699
1707
  if (E.isRight(a)) {
1700
1708
  out.push(a.right)
@@ -1766,7 +1774,7 @@ export const partition: {
1766
1774
  * @category filtering
1767
1775
  * @since 2.0.0
1768
1776
  */
1769
- export const separate: <E, A>(self: Iterable<Either<E, A>>) => [Array<E>, Array<A>] = partitionMap(
1777
+ export const separate: <R, L>(self: Iterable<Either<R, L>>) => [Array<L>, Array<R>] = partitionMap(
1770
1778
  identity
1771
1779
  )
1772
1780
 
@@ -1847,7 +1855,7 @@ export const flatMapNullable: {
1847
1855
  * @since 2.0.0
1848
1856
  */
1849
1857
  export const liftEither = <A extends Array<unknown>, E, B>(
1850
- f: (...a: A) => Either<E, B>
1858
+ f: (...a: A) => Either<B, E>
1851
1859
  ) =>
1852
1860
  (...a: A): Array<B> => {
1853
1861
  const e = f(...a)