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.
- package/dist/cjs/Cause.js.map +1 -1
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/Either.js +1 -1
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/Exit.js.map +1 -1
- package/dist/cjs/FiberMap.js +59 -3
- package/dist/cjs/FiberMap.js.map +1 -1
- package/dist/cjs/FiberSet.js +55 -3
- package/dist/cjs/FiberSet.js.map +1 -1
- package/dist/cjs/HashMap.js.map +1 -1
- package/dist/cjs/HashSet.js.map +1 -1
- package/dist/cjs/List.js.map +1 -1
- package/dist/cjs/ReadonlyArray.js.map +1 -1
- package/dist/cjs/ReadonlyRecord.js.map +1 -1
- package/dist/cjs/STM.js.map +1 -1
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +7 -7
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core.js +1 -1
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/fiberId.js +11 -3
- package/dist/cjs/internal/fiberId.js.map +1 -1
- package/dist/cjs/internal/groupBy.js.map +1 -1
- package/dist/cjs/internal/hashMap.js.map +1 -1
- package/dist/cjs/internal/hashSet.js.map +1 -1
- package/dist/cjs/internal/schedule.js +11 -1
- package/dist/cjs/internal/schedule.js.map +1 -1
- package/dist/cjs/internal/stm/stm.js.map +1 -1
- package/dist/cjs/internal/stream.js +1 -4
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/trie.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Cause.d.ts +6 -4
- package/dist/dts/Cause.d.ts.map +1 -1
- package/dist/dts/Chunk.d.ts +16 -16
- package/dist/dts/Chunk.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +31 -31
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/Either.d.ts +9 -9
- package/dist/dts/Either.d.ts.map +1 -1
- package/dist/dts/Exit.d.ts +3 -2
- package/dist/dts/Exit.d.ts.map +1 -1
- package/dist/dts/FiberMap.d.ts +42 -5
- package/dist/dts/FiberMap.d.ts.map +1 -1
- package/dist/dts/FiberSet.d.ts +36 -1
- package/dist/dts/FiberSet.d.ts.map +1 -1
- package/dist/dts/GroupBy.d.ts +6 -6
- package/dist/dts/GroupBy.d.ts.map +1 -1
- package/dist/dts/HashMap.d.ts +5 -4
- package/dist/dts/HashMap.d.ts.map +1 -1
- package/dist/dts/HashSet.d.ts +6 -5
- package/dist/dts/HashSet.d.ts.map +1 -1
- package/dist/dts/List.d.ts +9 -8
- package/dist/dts/List.d.ts.map +1 -1
- package/dist/dts/Option.d.ts +7 -7
- package/dist/dts/Option.d.ts.map +1 -1
- package/dist/dts/ReadonlyArray.d.ts +25 -23
- package/dist/dts/ReadonlyArray.d.ts.map +1 -1
- package/dist/dts/ReadonlyRecord.d.ts +5 -4
- package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
- package/dist/dts/STM.d.ts +28 -26
- package/dist/dts/STM.d.ts.map +1 -1
- package/dist/dts/SortedSet.d.ts +3 -3
- package/dist/dts/SortedSet.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +37 -37
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Trie.d.ts +4 -4
- package/dist/dts/Trie.d.ts.map +1 -1
- package/dist/dts/internal/hashMap.d.ts.map +1 -1
- package/dist/dts/internal/stm/stm.d.ts.map +1 -1
- package/dist/dts/internal/version.d.ts +1 -1
- package/dist/esm/Cause.js.map +1 -1
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/Either.js +1 -1
- package/dist/esm/Either.js.map +1 -1
- package/dist/esm/Exit.js.map +1 -1
- package/dist/esm/FiberMap.js +54 -1
- package/dist/esm/FiberMap.js.map +1 -1
- package/dist/esm/FiberSet.js +50 -1
- package/dist/esm/FiberSet.js.map +1 -1
- package/dist/esm/HashMap.js.map +1 -1
- package/dist/esm/HashSet.js.map +1 -1
- package/dist/esm/List.js.map +1 -1
- package/dist/esm/ReadonlyArray.js.map +1 -1
- package/dist/esm/ReadonlyRecord.js.map +1 -1
- package/dist/esm/STM.js.map +1 -1
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/core-effect.js +7 -7
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +1 -1
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/fiberId.js +11 -3
- package/dist/esm/internal/fiberId.js.map +1 -1
- package/dist/esm/internal/groupBy.js.map +1 -1
- package/dist/esm/internal/hashMap.js.map +1 -1
- package/dist/esm/internal/hashSet.js.map +1 -1
- package/dist/esm/internal/schedule.js +11 -1
- package/dist/esm/internal/schedule.js.map +1 -1
- package/dist/esm/internal/stm/stm.js.map +1 -1
- package/dist/esm/internal/stream.js +1 -4
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/trie.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/Cause.ts +6 -4
- package/src/Chunk.ts +20 -20
- package/src/Effect.ts +67 -72
- package/src/Either.ts +17 -21
- package/src/Exit.ts +3 -2
- package/src/FiberMap.ts +97 -16
- package/src/FiberSet.ts +86 -13
- package/src/GroupBy.ts +6 -6
- package/src/HashMap.ts +5 -4
- package/src/HashSet.ts +8 -7
- package/src/List.ts +11 -10
- package/src/Option.ts +8 -8
- package/src/ReadonlyArray.ts +44 -38
- package/src/ReadonlyRecord.ts +13 -10
- package/src/STM.ts +47 -46
- package/src/SortedSet.ts +5 -5
- package/src/Stream.ts +51 -51
- package/src/Trie.ts +4 -4
- package/src/internal/cause.ts +16 -7
- package/src/internal/core-effect.ts +160 -162
- package/src/internal/core.ts +30 -34
- package/src/internal/fiberId.ts +18 -17
- package/src/internal/groupBy.ts +2 -1
- package/src/internal/hashMap.ts +5 -4
- package/src/internal/hashSet.ts +9 -8
- package/src/internal/schedule.ts +15 -12
- package/src/internal/stm/stm.ts +104 -124
- package/src/internal/stream.ts +106 -97
- package/src/internal/trie.ts +3 -2
- 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
|
|
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
|
-
|
|
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
|
-
) =>
|
|
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
|
-
)
|
|
285
|
-
|
|
286
|
-
|
|
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
|
-
)
|
|
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
|
-
} =
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
Effect.
|
|
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
|
|
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:
|
|
47
|
-
readonly _E:
|
|
48
|
-
readonly _K:
|
|
49
|
-
readonly _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
|
|
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
|
|
384
|
-
<K,
|
|
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
|
|
418
|
-
<K,
|
|
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
|
|
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
|
|
275
|
-
<
|
|
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
|
-
<
|
|
292
|
-
refinement: Refinement<A
|
|
293
|
-
): (self: HashSet<
|
|
294
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
|
485
|
-
<
|
|
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
|
|
621
|
-
<
|
|
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
|
-
<
|
|
773
|
-
refinement: Refinement<A
|
|
774
|
-
): (self: List<
|
|
775
|
-
<
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
987
|
-
<
|
|
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
|
|
1131
|
-
<
|
|
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(
|