effect 2.1.2 → 2.2.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 (134) hide show
  1. package/dist/cjs/Cause.js.map +1 -1
  2. package/dist/cjs/Effect.js.map +1 -1
  3. package/dist/cjs/Either.js +1 -1
  4. package/dist/cjs/Either.js.map +1 -1
  5. package/dist/cjs/Exit.js.map +1 -1
  6. package/dist/cjs/FiberMap.js +59 -3
  7. package/dist/cjs/FiberMap.js.map +1 -1
  8. package/dist/cjs/FiberSet.js +55 -3
  9. package/dist/cjs/FiberSet.js.map +1 -1
  10. package/dist/cjs/HashMap.js.map +1 -1
  11. package/dist/cjs/HashSet.js.map +1 -1
  12. package/dist/cjs/List.js.map +1 -1
  13. package/dist/cjs/ReadonlyArray.js.map +1 -1
  14. package/dist/cjs/ReadonlyRecord.js.map +1 -1
  15. package/dist/cjs/STM.js.map +1 -1
  16. package/dist/cjs/internal/cause.js.map +1 -1
  17. package/dist/cjs/internal/core-effect.js +7 -7
  18. package/dist/cjs/internal/core-effect.js.map +1 -1
  19. package/dist/cjs/internal/core.js +1 -1
  20. package/dist/cjs/internal/core.js.map +1 -1
  21. package/dist/cjs/internal/fiberId.js +11 -3
  22. package/dist/cjs/internal/fiberId.js.map +1 -1
  23. package/dist/cjs/internal/groupBy.js.map +1 -1
  24. package/dist/cjs/internal/hashMap.js.map +1 -1
  25. package/dist/cjs/internal/hashSet.js.map +1 -1
  26. package/dist/cjs/internal/schedule.js +11 -1
  27. package/dist/cjs/internal/schedule.js.map +1 -1
  28. package/dist/cjs/internal/stm/stm.js.map +1 -1
  29. package/dist/cjs/internal/stream.js +1 -4
  30. package/dist/cjs/internal/stream.js.map +1 -1
  31. package/dist/cjs/internal/trie.js.map +1 -1
  32. package/dist/cjs/internal/version.js +1 -1
  33. package/dist/dts/Cause.d.ts +6 -4
  34. package/dist/dts/Cause.d.ts.map +1 -1
  35. package/dist/dts/Chunk.d.ts +16 -16
  36. package/dist/dts/Chunk.d.ts.map +1 -1
  37. package/dist/dts/Effect.d.ts +31 -31
  38. package/dist/dts/Effect.d.ts.map +1 -1
  39. package/dist/dts/Either.d.ts +9 -9
  40. package/dist/dts/Either.d.ts.map +1 -1
  41. package/dist/dts/Exit.d.ts +3 -2
  42. package/dist/dts/Exit.d.ts.map +1 -1
  43. package/dist/dts/FiberMap.d.ts +42 -5
  44. package/dist/dts/FiberMap.d.ts.map +1 -1
  45. package/dist/dts/FiberSet.d.ts +36 -1
  46. package/dist/dts/FiberSet.d.ts.map +1 -1
  47. package/dist/dts/GroupBy.d.ts +6 -6
  48. package/dist/dts/GroupBy.d.ts.map +1 -1
  49. package/dist/dts/HashMap.d.ts +5 -4
  50. package/dist/dts/HashMap.d.ts.map +1 -1
  51. package/dist/dts/HashSet.d.ts +6 -5
  52. package/dist/dts/HashSet.d.ts.map +1 -1
  53. package/dist/dts/List.d.ts +9 -8
  54. package/dist/dts/List.d.ts.map +1 -1
  55. package/dist/dts/Option.d.ts +7 -7
  56. package/dist/dts/Option.d.ts.map +1 -1
  57. package/dist/dts/ReadonlyArray.d.ts +25 -23
  58. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  59. package/dist/dts/ReadonlyRecord.d.ts +5 -4
  60. package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
  61. package/dist/dts/STM.d.ts +28 -26
  62. package/dist/dts/STM.d.ts.map +1 -1
  63. package/dist/dts/SortedSet.d.ts +3 -3
  64. package/dist/dts/SortedSet.d.ts.map +1 -1
  65. package/dist/dts/Stream.d.ts +37 -37
  66. package/dist/dts/Stream.d.ts.map +1 -1
  67. package/dist/dts/Trie.d.ts +4 -4
  68. package/dist/dts/Trie.d.ts.map +1 -1
  69. package/dist/dts/internal/hashMap.d.ts.map +1 -1
  70. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  71. package/dist/dts/internal/version.d.ts +1 -1
  72. package/dist/esm/Cause.js.map +1 -1
  73. package/dist/esm/Effect.js.map +1 -1
  74. package/dist/esm/Either.js +1 -1
  75. package/dist/esm/Either.js.map +1 -1
  76. package/dist/esm/Exit.js.map +1 -1
  77. package/dist/esm/FiberMap.js +54 -1
  78. package/dist/esm/FiberMap.js.map +1 -1
  79. package/dist/esm/FiberSet.js +50 -1
  80. package/dist/esm/FiberSet.js.map +1 -1
  81. package/dist/esm/HashMap.js.map +1 -1
  82. package/dist/esm/HashSet.js.map +1 -1
  83. package/dist/esm/List.js.map +1 -1
  84. package/dist/esm/ReadonlyArray.js.map +1 -1
  85. package/dist/esm/ReadonlyRecord.js.map +1 -1
  86. package/dist/esm/STM.js.map +1 -1
  87. package/dist/esm/internal/cause.js.map +1 -1
  88. package/dist/esm/internal/core-effect.js +7 -7
  89. package/dist/esm/internal/core-effect.js.map +1 -1
  90. package/dist/esm/internal/core.js +1 -1
  91. package/dist/esm/internal/core.js.map +1 -1
  92. package/dist/esm/internal/fiberId.js +11 -3
  93. package/dist/esm/internal/fiberId.js.map +1 -1
  94. package/dist/esm/internal/groupBy.js.map +1 -1
  95. package/dist/esm/internal/hashMap.js.map +1 -1
  96. package/dist/esm/internal/hashSet.js.map +1 -1
  97. package/dist/esm/internal/schedule.js +11 -1
  98. package/dist/esm/internal/schedule.js.map +1 -1
  99. package/dist/esm/internal/stm/stm.js.map +1 -1
  100. package/dist/esm/internal/stream.js +1 -4
  101. package/dist/esm/internal/stream.js.map +1 -1
  102. package/dist/esm/internal/trie.js.map +1 -1
  103. package/dist/esm/internal/version.js +1 -1
  104. package/package.json +1 -1
  105. package/src/Cause.ts +6 -4
  106. package/src/Chunk.ts +20 -20
  107. package/src/Effect.ts +67 -72
  108. package/src/Either.ts +17 -21
  109. package/src/Exit.ts +3 -2
  110. package/src/FiberMap.ts +97 -16
  111. package/src/FiberSet.ts +86 -13
  112. package/src/GroupBy.ts +6 -6
  113. package/src/HashMap.ts +5 -4
  114. package/src/HashSet.ts +8 -7
  115. package/src/List.ts +11 -10
  116. package/src/Option.ts +8 -8
  117. package/src/ReadonlyArray.ts +44 -38
  118. package/src/ReadonlyRecord.ts +13 -10
  119. package/src/STM.ts +47 -46
  120. package/src/SortedSet.ts +5 -5
  121. package/src/Stream.ts +51 -51
  122. package/src/Trie.ts +4 -4
  123. package/src/internal/cause.ts +16 -7
  124. package/src/internal/core-effect.ts +160 -162
  125. package/src/internal/core.ts +30 -34
  126. package/src/internal/fiberId.ts +18 -17
  127. package/src/internal/groupBy.ts +2 -1
  128. package/src/internal/hashMap.ts +5 -4
  129. package/src/internal/hashSet.ts +9 -8
  130. package/src/internal/schedule.ts +15 -12
  131. package/src/internal/stm/stm.ts +104 -124
  132. package/src/internal/stream.ts +106 -97
  133. package/src/internal/trie.ts +3 -2
  134. package/src/internal/version.ts +1 -1
package/src/FiberMap.ts CHANGED
@@ -7,11 +7,13 @@ import type { NoSuchElementException } from "./Cause.js"
7
7
  import * as Fiber from "./Fiber.js"
8
8
  import * as FiberId from "./FiberId.js"
9
9
  import { dual } from "./Function.js"
10
+ import type { FiberMap } from "./index.js"
10
11
  import * as Inspectable from "./Inspectable.js"
11
12
  import * as MutableHashMap from "./MutableHashMap.js"
12
13
  import * as Option from "./Option.js"
13
14
  import { type Pipeable, pipeArguments } from "./Pipeable.js"
14
15
  import * as Predicate from "./Predicate.js"
16
+ import * as Runtime from "./Runtime.js"
15
17
 
16
18
  /**
17
19
  * @since 2.0.0
@@ -98,6 +100,26 @@ const unsafeMake = <K, E = unknown, A = unknown>(): FiberMap<K, E, A> => {
98
100
  export const make = <K, E = unknown, A = unknown>(): Effect.Effect<Scope.Scope, never, FiberMap<K, E, A>> =>
99
101
  Effect.acquireRelease(Effect.sync(() => unsafeMake<K, E, A>()), clear)
100
102
 
103
+ /**
104
+ * Create an Effect run function that is backed by a FiberMap.
105
+ *
106
+ * @since 2.0.0
107
+ * @categories constructors
108
+ */
109
+ export const makeRuntime = <R, K, E = unknown, A = unknown>(): Effect.Effect<
110
+ Scope.Scope | R,
111
+ never,
112
+ <XE extends E, XA extends A>(
113
+ key: K,
114
+ effect: Effect.Effect<R, XE, XA>,
115
+ options?: Runtime.RunForkOptions | undefined
116
+ ) => Fiber.RuntimeFiber<XE, XA>
117
+ > =>
118
+ Effect.flatMap(
119
+ make<K, E, A>(),
120
+ (self) => runtime(self)<R>()
121
+ )
122
+
101
123
  /**
102
124
  * Add a fiber to the FiberMap. When the fiber completes, it will be removed from the FiberMap.
103
125
  * If the key already exists in the FiberMap, the previous fiber will be interrupted.
@@ -263,30 +285,89 @@ export const clear = <K, E, A>(self: FiberMap<K, E, A>): Effect.Effect<never, ne
263
285
  * @categories combinators
264
286
  */
265
287
  export const run: {
266
- <K, E, A, R, XE extends E, XA extends A>(
267
- key: K,
268
- effect: Effect.Effect<R, XE, XA>
269
- ): (self: FiberMap<K, E, A>) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
270
- <K, E, A, R, XE extends E, XA extends A>(
288
+ <K, E, A>(
271
289
  self: FiberMap<K, E, A>,
272
- key: K,
273
- effect: Effect.Effect<R, XE, XA>
274
- ): Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
275
- } = dual<
276
- <K, E, A, R, XE extends E, XA extends A>(
277
- key: K,
290
+ key: K
291
+ ): <R, XE extends E, XA extends A>(
278
292
  effect: Effect.Effect<R, XE, XA>
279
- ) => (self: FiberMap<K, E, A>) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>,
293
+ ) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
280
294
  <K, E, A, R, XE extends E, XA extends A>(
281
295
  self: FiberMap<K, E, A>,
282
296
  key: K,
283
297
  effect: Effect.Effect<R, XE, XA>
284
- ) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
285
- >(3, (self, key, effect) =>
286
- Effect.tap(
298
+ ): Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
299
+ } = function() {
300
+ if (arguments.length === 2) {
301
+ const self = arguments[0] as FiberMap<any>
302
+ const key = arguments[1]
303
+ return (effect: Effect.Effect<any, any, any>) =>
304
+ Effect.tap(
305
+ Effect.forkDaemon(effect),
306
+ (fiber) => set(self, key, fiber)
307
+ )
308
+ }
309
+ const self = arguments[0] as FiberMap<any>
310
+ const key = arguments[1]
311
+ const effect = arguments[2] as Effect.Effect<any, any, any>
312
+ return Effect.tap(
287
313
  Effect.forkDaemon(effect),
288
314
  (fiber) => set(self, key, fiber)
289
- ))
315
+ ) as any
316
+ }
317
+
318
+ /**
319
+ * Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberMap.
320
+ *
321
+ * @example
322
+ * import { Context, Effect, FiberMap } from "effect"
323
+ *
324
+ * interface Users {
325
+ * readonly _: unique symbol
326
+ * }
327
+ * const Users = Context.Tag<Users, {
328
+ * getAll: Effect.Effect<never, never, Array<unknown>>
329
+ * }>()
330
+ *
331
+ * Effect.gen(function*(_) {
332
+ * const map = yield* _(FiberMap.make<string>())
333
+ * const run = yield* _(FiberMap.runtime(map)<Users>())
334
+ *
335
+ * // run some effects and add the fibers to the map
336
+ * run("effect-a", Effect.andThen(Users, _ => _.getAll))
337
+ * run("effect-b", Effect.andThen(Users, _ => _.getAll))
338
+ * }).pipe(
339
+ * Effect.scoped // The fibers will be interrupted when the scope is closed
340
+ * )
341
+ *
342
+ * @since 2.0.0
343
+ * @categories combinators
344
+ */
345
+ export const runtime: <K, E, A>(
346
+ self: FiberMap<K, E, A>
347
+ ) => <R>() => Effect.Effect<
348
+ R,
349
+ never,
350
+ <XE extends E, XA extends A>(
351
+ key: K,
352
+ effect: Effect.Effect<R, XE, XA>,
353
+ options?: Runtime.RunForkOptions | undefined
354
+ ) => Fiber.RuntimeFiber<XE, XA>
355
+ > = <K, E, A>(self: FiberMap<K, E, A>) => <R>() =>
356
+ Effect.map(
357
+ Effect.runtime<R>(),
358
+ (runtime) => {
359
+ const runFork = Runtime.runFork(runtime)
360
+ return <XE extends E, XA extends A>(
361
+ key: K,
362
+ effect: Effect.Effect<R, XE, XA>,
363
+ options?: Runtime.RunForkOptions | undefined
364
+ ) => {
365
+ const fiber = runFork(effect, options)
366
+ unsafeSet(self, key, fiber)
367
+ return fiber
368
+ }
369
+ }
370
+ )
290
371
 
291
372
  /**
292
373
  * @since 2.0.0
package/src/FiberSet.ts CHANGED
@@ -8,6 +8,7 @@ import { dual } from "./Function.js"
8
8
  import * as Inspectable from "./Inspectable.js"
9
9
  import { type Pipeable, pipeArguments } from "./Pipeable.js"
10
10
  import * as Predicate from "./Predicate.js"
11
+ import * as Runtime from "./Runtime.js"
11
12
 
12
13
  /**
13
14
  * @since 2.0.0
@@ -94,6 +95,25 @@ const unsafeMake = <E = unknown, A = unknown>(): FiberSet<E, A> => {
94
95
  export const make = <E = unknown, A = unknown>(): Effect.Effect<Scope.Scope, never, FiberSet<E, A>> =>
95
96
  Effect.acquireRelease(Effect.sync(() => unsafeMake<E, A>()), clear)
96
97
 
98
+ /**
99
+ * Create an Effect run function that is backed by a FiberSet.
100
+ *
101
+ * @since 2.0.0
102
+ * @categories constructors
103
+ */
104
+ export const makeRuntime = <R, E = unknown, A = unknown>(): Effect.Effect<
105
+ Scope.Scope | R,
106
+ never,
107
+ <XE extends E, XA extends A>(
108
+ effect: Effect.Effect<R, XE, XA>,
109
+ options?: Runtime.RunForkOptions | undefined
110
+ ) => Fiber.RuntimeFiber<XE, XA>
111
+ > =>
112
+ Effect.flatMap(
113
+ make<E, A>(),
114
+ (self) => runtime(self)<R>()
115
+ )
116
+
97
117
  /**
98
118
  * Add a fiber to the FiberSet. When the fiber completes, it will be removed.
99
119
  *
@@ -165,26 +185,79 @@ export const clear = <E, A>(self: FiberSet<E, A>): Effect.Effect<never, never, v
165
185
  * @categories combinators
166
186
  */
167
187
  export const run: {
168
- <E, A, R, XE extends E, XA extends A>(
188
+ <E, A>(self: FiberSet<E, A>): <R, XE extends E, XA extends A>(
169
189
  effect: Effect.Effect<R, XE, XA>
170
- ): (self: FiberSet<E, A>) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
190
+ ) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
171
191
  <E, A, R, XE extends E, XA extends A>(
172
192
  self: FiberSet<E, A>,
173
193
  effect: Effect.Effect<R, XE, XA>
174
194
  ): Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
175
- } = dual<
176
- <E, A, R, XE extends E, XA extends A>(
177
- effect: Effect.Effect<R, XE, XA>
178
- ) => (self: FiberSet<E, A>) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>,
179
- <E, A, R, XE extends E, XA extends A>(
180
- self: FiberSet<E, A>,
181
- effect: Effect.Effect<R, XE, XA>
182
- ) => Effect.Effect<R, never, Fiber.RuntimeFiber<XE, XA>>
183
- >(2, (self, effect) =>
184
- Effect.tap(
195
+ } = function() {
196
+ const self = arguments[0] as FiberSet<any>
197
+ if (arguments.length === 1) {
198
+ return (effect: Effect.Effect<any, any, any>) =>
199
+ Effect.tap(
200
+ Effect.forkDaemon(effect),
201
+ (fiber) => add(self, fiber)
202
+ )
203
+ }
204
+ const effect = arguments[1] as Effect.Effect<any, any, any>
205
+ return Effect.tap(
185
206
  Effect.forkDaemon(effect),
186
207
  (fiber) => add(self, fiber)
187
- ))
208
+ ) as any
209
+ }
210
+
211
+ /**
212
+ * Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberSet.
213
+ *
214
+ * @example
215
+ * import { Context, Effect, FiberSet } from "effect"
216
+ *
217
+ * interface Users {
218
+ * readonly _: unique symbol
219
+ * }
220
+ * const Users = Context.Tag<Users, {
221
+ * getAll: Effect.Effect<never, never, Array<unknown>>
222
+ * }>()
223
+ *
224
+ * Effect.gen(function*(_) {
225
+ * const set = yield* _(FiberSet.make())
226
+ * const run = yield* _(FiberSet.runtime(set)<Users>())
227
+ *
228
+ * // run some effects and add the fibers to the set
229
+ * run(Effect.andThen(Users, _ => _.getAll))
230
+ * }).pipe(
231
+ * Effect.scoped // The fibers will be interrupted when the scope is closed
232
+ * )
233
+ *
234
+ * @since 2.0.0
235
+ * @categories combinators
236
+ */
237
+ export const runtime: <E, A>(
238
+ self: FiberSet<E, A>
239
+ ) => <R>() => Effect.Effect<
240
+ R,
241
+ never,
242
+ <XE extends E, XA extends A>(
243
+ effect: Effect.Effect<R, XE, XA>,
244
+ options?: Runtime.RunForkOptions | undefined
245
+ ) => Fiber.RuntimeFiber<XE, XA>
246
+ > = <E, A>(self: FiberSet<E, A>) => <R>() =>
247
+ Effect.map(
248
+ Effect.runtime<R>(),
249
+ (runtime) => {
250
+ const runFork = Runtime.runFork(runtime)
251
+ return <XE extends E, XA extends A>(
252
+ effect: Effect.Effect<R, XE, XA>,
253
+ options?: Runtime.RunForkOptions | undefined
254
+ ) => {
255
+ const fiber = runFork(effect, options)
256
+ unsafeAdd(self, fiber)
257
+ return fiber
258
+ }
259
+ }
260
+ )
188
261
 
189
262
  /**
190
263
  * @since 2.0.0
package/src/GroupBy.ts CHANGED
@@ -7,7 +7,7 @@ import type { Predicate } from "./Predicate.js"
7
7
  import type * as Queue from "./Queue.js"
8
8
  import type * as Stream from "./Stream.js"
9
9
  import type * as Take from "./Take.js"
10
- import type * as Types from "./Types.js"
10
+ import type { Covariant, NoInfer } from "./Types.js"
11
11
 
12
12
  /**
13
13
  * @since 2.0.0
@@ -43,10 +43,10 @@ export declare namespace GroupBy {
43
43
  */
44
44
  export interface Variance<out R, out E, out K, out V> {
45
45
  readonly [GroupByTypeId]: {
46
- readonly _R: Types.Covariant<R>
47
- readonly _E: Types.Covariant<E>
48
- readonly _K: Types.Covariant<K>
49
- readonly _V: Types.Covariant<V>
46
+ readonly _R: Covariant<R>
47
+ readonly _E: Covariant<E>
48
+ readonly _K: Covariant<K>
49
+ readonly _V: Covariant<V>
50
50
  }
51
51
  }
52
52
  }
@@ -81,7 +81,7 @@ export const evaluate: {
81
81
  * @category utils
82
82
  */
83
83
  export const filter: {
84
- <K>(predicate: Predicate<K>): <R, E, V>(self: GroupBy<R, E, K, V>) => GroupBy<R, E, K, V>
84
+ <K>(predicate: Predicate<NoInfer<K>>): <R, E, V>(self: GroupBy<R, E, K, V>) => GroupBy<R, E, K, V>
85
85
  <R, E, V, K>(self: GroupBy<R, E, K, V>, predicate: Predicate<K>): GroupBy<R, E, K, V>
86
86
  } = internal.filter
87
87
 
package/src/HashMap.ts CHANGED
@@ -9,6 +9,7 @@ import * as HM from "./internal/hashMap.js"
9
9
  import * as _keySet from "./internal/hashMap/keySet.js"
10
10
  import type { Option } from "./Option.js"
11
11
  import type { Pipeable } from "./Pipeable.js"
12
+ import type { NoInfer } from "./Types.js"
12
13
 
13
14
  const TypeId: unique symbol = HM.HashMapTypeId as TypeId
14
15
 
@@ -380,8 +381,8 @@ export const reduce: {
380
381
  * @category filtering
381
382
  */
382
383
  export const filter: {
383
- <K, A, B extends A>(f: (a: A, k: K) => a is B): (self: HashMap<K, A>) => HashMap<K, B>
384
- <K, B extends A, A = B>(f: (a: A, k: K) => boolean): (self: HashMap<K, B>) => HashMap<K, B>
384
+ <K, A, B extends A>(f: (a: NoInfer<A>, k: K) => a is B): (self: HashMap<K, A>) => HashMap<K, B>
385
+ <K, A>(f: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => HashMap<K, A>
385
386
  <K, A, B extends A>(self: HashMap<K, A>, f: (a: A, k: K) => a is B): HashMap<K, B>
386
387
  <K, A>(self: HashMap<K, A>, f: (a: A, k: K) => boolean): HashMap<K, A>
387
388
  } = HM.filter
@@ -414,8 +415,8 @@ export const filterMap: {
414
415
  * @since 2.0.0
415
416
  */
416
417
  export const findFirst: {
417
- <K, A, B extends A>(predicate: (a: A, k: K) => a is B): (self: HashMap<K, A>) => Option<[K, B]>
418
- <K, B extends A, A = B>(predicate: (a: A, k: K) => boolean): (self: HashMap<K, B>) => Option<[K, B]>
418
+ <K, A, B extends A>(predicate: (a: NoInfer<A>, k: K) => a is B): (self: HashMap<K, A>) => Option<[K, B]>
419
+ <K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => Option<[K, A]>
419
420
  <K, A, B extends A>(self: HashMap<K, A>, predicate: (a: A, k: K) => a is B): Option<[K, B]>
420
421
  <K, A>(self: HashMap<K, A>, predicate: (a: A, k: K) => boolean): Option<[K, A]>
421
422
  } = HM.findFirst
package/src/HashSet.ts CHANGED
@@ -7,6 +7,7 @@ import type { Inspectable } from "./Inspectable.js"
7
7
  import * as HS from "./internal/hashSet.js"
8
8
  import type { Pipeable } from "./Pipeable.js"
9
9
  import type { Predicate, Refinement } from "./Predicate.js"
10
+ import type { NoInfer } from "./Types.js"
10
11
 
11
12
  const TypeId: unique symbol = HS.HashSetTypeId as TypeId
12
13
 
@@ -86,7 +87,7 @@ export const some: {
86
87
  * @category elements
87
88
  */
88
89
  export const every: {
89
- <A, B extends A>(refinement: Refinement<A, B>): (self: HashSet<A>) => self is HashSet<B>
90
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: HashSet<A>) => self is HashSet<B>
90
91
  <A>(predicate: Predicate<A>): (self: HashSet<A>) => boolean
91
92
  <A, B extends A>(self: HashSet<A>, refinement: Refinement<A, B>): self is HashSet<B>
92
93
  <A>(self: HashSet<A>, predicate: Predicate<A>): boolean
@@ -271,8 +272,8 @@ export const reduce: {
271
272
  * @category filtering
272
273
  */
273
274
  export const filter: {
274
- <A, B extends A>(refinement: Refinement<A, B>): (self: HashSet<A>) => HashSet<B>
275
- <B extends A, A = B>(predicate: Predicate<A>): (self: HashSet<B>) => HashSet<B>
275
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: HashSet<A>) => HashSet<B>
276
+ <A>(predicate: Predicate<NoInfer<A>>): (self: HashSet<A>) => HashSet<A>
276
277
  <A, B extends A>(self: HashSet<A>, refinement: Refinement<A, B>): HashSet<B>
277
278
  <A>(self: HashSet<A>, predicate: Predicate<A>): HashSet<A>
278
279
  } = HS.filter
@@ -288,10 +289,10 @@ export const filter: {
288
289
  * @category partitioning
289
290
  */
290
291
  export const partition: {
291
- <C extends A, B extends A, A = C>(
292
- refinement: Refinement<A, B>
293
- ): (self: HashSet<C>) => [excluded: HashSet<Exclude<C, B>>, satisfying: HashSet<B>]
294
- <B extends A, A = B>(predicate: Predicate<A>): (self: HashSet<B>) => [excluded: HashSet<B>, satisfying: HashSet<B>]
292
+ <A, B extends A>(
293
+ refinement: Refinement<NoInfer<A>, B>
294
+ ): (self: HashSet<A>) => [excluded: HashSet<Exclude<A, B>>, satisfying: HashSet<B>]
295
+ <A>(predicate: Predicate<NoInfer<A>>): (self: HashSet<A>) => [excluded: HashSet<A>, satisfying: HashSet<A>]
295
296
  <A, B extends A>(
296
297
  self: HashSet<A>,
297
298
  refinement: Refinement<A, B>
package/src/List.ts CHANGED
@@ -33,6 +33,7 @@ import type { Pipeable } from "./Pipeable.js"
33
33
  import { pipeArguments } from "./Pipeable.js"
34
34
  import { hasProperty, type Predicate, type Refinement } from "./Predicate.js"
35
35
  import * as ReadonlyArray from "./ReadonlyArray.js"
36
+ import type { NoInfer } from "./Types.js"
36
37
 
37
38
  /**
38
39
  * Represents an immutable linked list of elements of type `A`.
@@ -441,7 +442,7 @@ export const drop: {
441
442
  * @category elements
442
443
  */
443
444
  export const every: {
444
- <A, B extends A>(refinement: Refinement<A, B>): (self: List<A>) => self is List<B>
445
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: List<A>) => self is List<B>
445
446
  <A>(predicate: Predicate<A>): (self: List<A>) => boolean
446
447
  <A, B extends A>(self: List<A>, refinement: Refinement<A, B>): self is List<B>
447
448
  <A>(self: List<A>, predicate: Predicate<A>): boolean
@@ -461,7 +462,7 @@ export const every: {
461
462
  * @category elements
462
463
  */
463
464
  export const some: {
464
- <B extends A, A = B>(predicate: Predicate<A>): (self: List<B>) => self is Cons<B>
465
+ <A>(predicate: Predicate<NoInfer<A>>): (self: List<A>) => self is Cons<A>
465
466
  <A>(self: List<A>, predicate: Predicate<A>): self is Cons<A>
466
467
  } = dual(2, <A>(self: List<A>, predicate: Predicate<A>): self is Cons<A> => {
467
468
  let these = self
@@ -481,8 +482,8 @@ export const some: {
481
482
  * @category combinators
482
483
  */
483
484
  export const filter: {
484
- <A, B extends A>(refinement: Refinement<A, B>): (self: List<A>) => List<B>
485
- <B extends A, A = B>(predicate: Predicate<A>): (self: List<B>) => List<B>
485
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: List<A>) => List<B>
486
+ <A>(predicate: Predicate<NoInfer<A>>): (self: List<A>) => List<A>
486
487
  <A, B extends A>(self: List<A>, refinement: Refinement<A, B>): List<B>
487
488
  <A>(self: List<A>, predicate: Predicate<A>): List<A>
488
489
  } = dual(2, <A>(self: List<A>, predicate: Predicate<A>): List<A> => noneIn(self, predicate, false))
@@ -617,8 +618,8 @@ export const compact = <A>(self: List<Option.Option<A>>): List<A> => filterMap(s
617
618
  * @since 2.0.0
618
619
  */
619
620
  export const findFirst: {
620
- <A, B extends A>(refinement: Refinement<A, B>): (self: List<A>) => Option.Option<B>
621
- <B extends A, A = B>(predicate: Predicate<A>): (self: List<B>) => Option.Option<B>
621
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: List<A>) => Option.Option<B>
622
+ <A>(predicate: Predicate<NoInfer<A>>): (self: List<A>) => Option.Option<A>
622
623
  <A, B extends A>(self: List<A>, refinement: Refinement<A, B>): Option.Option<B>
623
624
  <A>(self: List<A>, predicate: Predicate<A>): Option.Option<A>
624
625
  } = dual(2, <A>(self: List<A>, predicate: Predicate<A>): Option.Option<A> => {
@@ -769,10 +770,10 @@ export const map: {
769
770
  * @category combinators
770
771
  */
771
772
  export const partition: {
772
- <C extends A, B extends A, A = C>(
773
- refinement: Refinement<A, B>
774
- ): (self: List<C>) => [excluded: List<Exclude<C, B>>, satisfying: List<B>]
775
- <B extends A, A = B>(predicate: Predicate<A>): (self: List<B>) => [excluded: List<B>, satisfying: List<B>]
773
+ <A, B extends A>(
774
+ refinement: Refinement<NoInfer<A>, B>
775
+ ): (self: List<A>) => [excluded: List<Exclude<A, B>>, satisfying: List<B>]
776
+ <A>(predicate: Predicate<NoInfer<A>>): (self: List<A>) => [excluded: List<A>, satisfying: List<A>]
776
777
  <A, B extends A>(self: List<A>, refinement: Refinement<A, B>): [excluded: List<Exclude<A, B>>, satisfying: List<B>]
777
778
  <A>(self: List<A>, predicate: Predicate<A>): [excluded: List<A>, satisfying: List<A>]
778
779
  } = dual(2, <A>(self: List<A>, predicate: Predicate<A>): [excluded: List<A>, satisfying: List<A>] => {
package/src/Option.ts CHANGED
@@ -15,7 +15,7 @@ import type { Order } from "./Order.js"
15
15
  import * as order from "./Order.js"
16
16
  import type { Pipeable } from "./Pipeable.js"
17
17
  import type { Predicate, Refinement } from "./Predicate.js"
18
- import type * as Types from "./Types.js"
18
+ import type { Covariant, NoInfer } from "./Types.js"
19
19
  import type * as Unify from "./Unify.js"
20
20
  import * as Gen from "./Utils.js"
21
21
 
@@ -45,7 +45,7 @@ export interface None<out A> extends Data.Case, Pipeable, Inspectable {
45
45
  readonly _tag: "None"
46
46
  readonly _op: "None"
47
47
  readonly [TypeId]: {
48
- readonly _A: Types.Covariant<A>
48
+ readonly _A: Covariant<A>
49
49
  }
50
50
  [Unify.typeSymbol]?: unknown
51
51
  [Unify.unifySymbol]?: OptionUnify<this>
@@ -61,7 +61,7 @@ export interface Some<out A> extends Data.Case, Pipeable, Inspectable {
61
61
  readonly _op: "Some"
62
62
  readonly value: A
63
63
  readonly [TypeId]: {
64
- readonly _A: Types.Covariant<A>
64
+ readonly _A: Covariant<A>
65
65
  }
66
66
  [Unify.typeSymbol]?: unknown
67
67
  [Unify.unifySymbol]?: OptionUnify<this>
@@ -983,8 +983,8 @@ export const filterMap: {
983
983
  * @since 2.0.0
984
984
  */
985
985
  export const filter: {
986
- <A, B extends A>(refinement: Refinement<A, B>): (self: Option<A>) => Option<B>
987
- <B extends A, A = B>(predicate: Predicate<A>): (self: Option<B>) => Option<B>
986
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: Option<A>) => Option<B>
987
+ <A>(predicate: Predicate<NoInfer<A>>): (self: Option<A>) => Option<A>
988
988
  <A, B extends A>(self: Option<A>, refinement: Refinement<A, B>): Option<B>
989
989
  <A>(self: Option<A>, predicate: Predicate<A>): Option<A>
990
990
  } = dual(
@@ -1066,7 +1066,7 @@ export const lift2 = <A, B, C>(f: (a: A, b: B) => C): {
1066
1066
  * @category lifting
1067
1067
  * @since 2.0.0
1068
1068
  */
1069
- export const liftPredicate: {
1069
+ export const liftPredicate: { // Note: I intentionally avoid using the NoInfer pattern here.
1070
1070
  <A, B extends A>(refinement: Refinement<A, B>): (a: A) => Option<B>
1071
1071
  <B extends A, A = B>(predicate: Predicate<A>): (b: B) => Option<B>
1072
1072
  } = <B extends A, A = B>(predicate: Predicate<A>) => (b: B): Option<B> => predicate(b) ? some(b) : none()
@@ -1127,8 +1127,8 @@ export const contains: {
1127
1127
  * @since 2.0.0
1128
1128
  */
1129
1129
  export const exists: {
1130
- <A, B extends A>(refinement: Refinement<A, B>): (self: Option<A>) => self is Option<B>
1131
- <B extends A, A = B>(predicate: Predicate<A>): (self: Option<B>) => boolean
1130
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: Option<A>) => self is Option<B>
1131
+ <A>(predicate: Predicate<NoInfer<A>>): (self: Option<A>) => boolean
1132
1132
  <A, B extends A>(self: Option<A>, refinement: Refinement<A, B>): self is Option<B>
1133
1133
  <A>(self: Option<A>, predicate: Predicate<A>): boolean
1134
1134
  } = dual(