FiberMap overview
Added in v2.0.0
Table of contents
utils
FiberMap (interface)
Signature
export interface FiberMap<in out K, out A = unknown, out E = unknown>
extends Pipeable,
Inspectable.Inspectable,
Iterable<[K, Fiber.RuntimeFiber<A, E>]> {
readonly [TypeId]: TypeId
readonly deferred: Deferred.Deferred<void, unknown>
/** @internal */
state:
| {
readonly _tag: "Open"
readonly backing: MutableHashMap.MutableHashMap<K, Fiber.RuntimeFiber<A, E>>
}
| {
readonly _tag: "Closed"
}
}
Added in v2.0.0
TypeId
Signature
export declare const TypeId: typeof TypeId
Added in v2.0.0
TypeId (type alias)
Signature
export type TypeId = typeof TypeId
Added in v2.0.0
clear
Signature
export declare const clear: <K, A, E>(self: FiberMap<K, A, E>) => Effect.Effect<void>
Added in v2.0.0
get
Retrieve a fiber from the FiberMap.
Signature
export declare const get: {
<K>(key: K): <A, E>(self: FiberMap<K, A, E>) => Effect.Effect<Fiber.RuntimeFiber<A, E>, NoSuchElementException>
<K, A, E>(self: FiberMap<K, A, E>, key: K): Effect.Effect<Fiber.RuntimeFiber<A, E>, NoSuchElementException>
}
Added in v2.0.0
has
Check if a key exists in the FiberMap.
Signature
export declare const has: {
<K>(key: K): <A, E>(self: FiberMap<K, A, E>) => Effect.Effect<boolean>
<K, A, E>(self: FiberMap<K, A, E>, key: K): Effect.Effect<boolean>
}
Added in v2.0.0
isFiberMap
Signature
export declare const isFiberMap: (u: unknown) => u is FiberMap<unknown>
Added in v2.0.0
join
Join all fibers in the FiberMap. If any of the Fiber’s in the map terminate with a failure, the returned Effect will terminate with the first failure that occurred.
Signature
export declare const join: <K, A, E>(self: FiberMap<K, A, E>) => Effect.Effect<void, E>
Example
import { Effect, FiberMap } from "effect"
Effect.gen(function* (_) {
const map = yield* _(FiberMap.make())
yield* _(FiberMap.set(map, "a", Effect.runFork(Effect.fail("error"))))
// parent fiber will fail with "error"
yield* _(FiberMap.join(map))
})
Added in v2.0.0
make
A FiberMap can be used to store a collection of fibers, indexed by some key. When the associated Scope is closed, all fibers in the map will be interrupted.
You can add fibers to the map using FiberMap.set
or FiberMap.run
, and the fibers will be automatically removed from the FiberMap when they complete.
Signature
export declare const make: <K, A = unknown, E = unknown>() => Effect.Effect<FiberMap<K, A, E>, never, Scope.Scope>
Example
import { Effect, FiberMap } from "effect"
Effect.gen(function* () {
const map = yield* FiberMap.make<string>()
// run some effects and add the fibers to the map
yield* FiberMap.run(map, "fiber a", Effect.never)
yield* FiberMap.run(map, "fiber b", Effect.never)
yield* Effect.sleep(1000)
}).pipe(
Effect.scoped // The fibers will be interrupted when the scope is closed
)
Added in v2.0.0
makeRuntime
Create an Effect run function that is backed by a FiberMap.
Signature
export declare const makeRuntime: <R, K, E = unknown, A = unknown>() => Effect.Effect<
<XE extends E, XA extends A>(
key: K,
effect: Effect.Effect<XA, XE, R>,
options?: (Runtime.RunForkOptions & { readonly onlyIfMissing?: boolean | undefined }) | undefined
) => Fiber.RuntimeFiber<XA, XE>,
never,
Scope.Scope | R
>
Added in v2.0.0
remove
Remove a fiber from the FiberMap, interrupting it if it exists.
Signature
export declare const remove: {
<K>(key: K): <A, E>(self: FiberMap<K, A, E>) => Effect.Effect<void>
<K, A, E>(self: FiberMap<K, A, E>, key: K): Effect.Effect<void>
}
Added in v2.0.0
run
Run an Effect and add the forked fiber to the FiberMap. When the fiber completes, it will be removed from the FiberMap.
Signature
export declare const run: {
<K, A, E>(
self: FiberMap<K, A, E>,
key: K,
options?:
| { readonly onlyIfMissing?: boolean | undefined; readonly propagateInterruption?: boolean | undefined }
| undefined
): <R, XE extends E, XA extends A>(
effect: Effect.Effect<XA, XE, R>
) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
<K, A, E, R, XE extends E, XA extends A>(
self: FiberMap<K, A, E>,
key: K,
effect: Effect.Effect<XA, XE, R>,
options?:
| { readonly onlyIfMissing?: boolean | undefined; readonly propagateInterruption?: boolean | undefined }
| undefined
): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
}
Added in v2.0.0
runtime
Capture a Runtime and use it to fork Effect’s, adding the forked fibers to the FiberMap.
Signature
export declare const runtime: <K, A, E>(
self: FiberMap<K, A, E>
) => <R = never>() => Effect.Effect<
<XE extends E, XA extends A>(
key: K,
effect: Effect.Effect<XA, XE, R>,
options?:
| (Runtime.RunForkOptions & {
readonly onlyIfMissing?: boolean | undefined
readonly propagateInterruption?: boolean | undefined
})
| undefined
) => Fiber.RuntimeFiber<XA, XE>,
never,
R
>
Example
import { Context, Effect, FiberMap } from "effect"
interface Users {
readonly _: unique symbol
}
const Users = Context.GenericTag<
Users,
{
getAll: Effect.Effect<Array<unknown>>
}
>("Users")
Effect.gen(function* () {
const map = yield* FiberMap.make<string>()
const run = yield* FiberMap.runtime(map)<Users>()
// run some effects and add the fibers to the map
run(
"effect-a",
Effect.andThen(Users, (_) => _.getAll)
)
run(
"effect-b",
Effect.andThen(Users, (_) => _.getAll)
)
}).pipe(
Effect.scoped // The fibers will be interrupted when the scope is closed
)
Added in v2.0.0
set
Add a fiber to the FiberMap. When the fiber completes, it will be removed from the FiberMap. If the key already exists in the FiberMap, the previous fiber will be interrupted.
Signature
export declare const set: {
<K, A, E, XE extends E, XA extends A>(
key: K,
fiber: Fiber.RuntimeFiber<XA, XE>,
options?:
| { readonly onlyIfMissing?: boolean | undefined; readonly propagateInterruption?: boolean | undefined }
| undefined
): (self: FiberMap<K, A, E>) => Effect.Effect<void>
<K, A, E, XE extends E, XA extends A>(
self: FiberMap<K, A, E>,
key: K,
fiber: Fiber.RuntimeFiber<XA, XE>,
options?:
| { readonly onlyIfMissing?: boolean | undefined; readonly propagateInterruption?: boolean | undefined }
| undefined
): Effect.Effect<void>
}
Added in v2.0.0
size
Signature
export declare const size: <K, A, E>(self: FiberMap<K, A, E>) => Effect.Effect<number>
Added in v2.0.0
unsafeGet
Retrieve a fiber from the FiberMap.
Signature
export declare const unsafeGet: {
<K>(key: K): <A, E>(self: FiberMap<K, A, E>) => Option.Option<Fiber.RuntimeFiber<A, E>>
<K, A, E>(self: FiberMap<K, A, E>, key: K): Option.Option<Fiber.RuntimeFiber<A, E>>
}
Added in v2.0.0
unsafeHas
Check if a key exists in the FiberMap.
Signature
export declare const unsafeHas: {
<K>(key: K): <A, E>(self: FiberMap<K, A, E>) => boolean
<K, A, E>(self: FiberMap<K, A, E>, key: K): boolean
}
Added in v2.0.0
unsafeSet
Add a fiber to the FiberMap. When the fiber completes, it will be removed from the FiberMap. If the key already exists in the FiberMap, the previous fiber will be interrupted.
Signature
export declare const unsafeSet: {
<K, A, E, XE extends E, XA extends A>(
key: K,
fiber: Fiber.RuntimeFiber<XA, XE>,
options?:
| {
readonly interruptAs?: FiberId.FiberId | undefined
readonly onlyIfMissing?: boolean | undefined
readonly propagateInterruption?: boolean | undefined
}
| undefined
): (self: FiberMap<K, A, E>) => void
<K, A, E, XE extends E, XA extends A>(
self: FiberMap<K, A, E>,
key: K,
fiber: Fiber.RuntimeFiber<XA, XE>,
options?:
| {
readonly interruptAs?: FiberId.FiberId | undefined
readonly onlyIfMissing?: boolean | undefined
readonly propagateInterruption?: boolean | undefined
}
| undefined
): void
}
Added in v2.0.0