FiberSet overview
Added in v2.0.0
Table of contents
utils
FiberSet (interface)
Signature
export interface FiberSet<out A = unknown, out E = unknown>
extends Pipeable,
Inspectable.Inspectable,
Iterable<Fiber.RuntimeFiber<A, E>> {
readonly [TypeId]: TypeId
readonly deferred: Deferred.Deferred<void, unknown>
/** @internal */
state:
| {
readonly _tag: "Open"
readonly backing: Set<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
add
Add a fiber to the FiberSet. When the fiber completes, it will be removed.
Signature
export declare const add: {
<A, E, XE extends E, XA extends A>(fiber: Fiber.RuntimeFiber<XA, XE>): (self: FiberSet<A, E>) => Effect.Effect<void>
<A, E, XE extends E, XA extends A>(self: FiberSet<A, E>, fiber: Fiber.RuntimeFiber<XA, XE>): Effect.Effect<void>
}
Added in v2.0.0
clear
Signature
export declare const clear: <A, E>(self: FiberSet<A, E>) => Effect.Effect<void>
Added in v2.0.0
isFiberSet
Signature
export declare const isFiberSet: (u: unknown) => u is FiberSet<unknown, unknown>
Added in v2.0.0
join
Join all fibers in the FiberSet. If any of the Fiber’s in the set terminate with a failure, the returned Effect will terminate with the first failure that occurred.
Signature
export declare const join: <A, E>(self: FiberSet<A, E>) => Effect.Effect<void, E>
Example
import { Effect, FiberSet } from "effect"
Effect.gen(function* (_) {
const set = yield* _(FiberSet.make())
yield* _(FiberSet.add(set, Effect.runFork(Effect.fail("error"))))
// parent fiber will fail with "error"
yield* _(FiberSet.join(set))
})
Added in v2.0.0
make
A FiberSet can be used to store a collection of fibers. When the associated Scope is closed, all fibers in the set will be interrupted.
You can add fibers to the set using FiberSet.add
or FiberSet.run
, and the fibers will be automatically removed from the FiberSet when they complete.
Signature
export declare const make: <A = unknown, E = unknown>() => Effect.Effect<FiberSet<A, E>, never, Scope.Scope>
Example
import { Effect, FiberSet } from "effect"
Effect.gen(function* (_) {
const set = yield* _(FiberSet.make())
// run some effects and add the fibers to the set
yield* _(FiberSet.run(set, Effect.never))
yield* _(FiberSet.run(set, 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 FiberSet.
Signature
export declare const makeRuntime: <R = never, A = unknown, E = unknown>() => Effect.Effect<
<XE extends E, XA extends A>(
effect: Effect.Effect<XA, XE, R>,
options?: Runtime.RunForkOptions | undefined
) => Fiber.RuntimeFiber<XA, XE>,
never,
any
>
Added in v2.0.0
run
Fork an Effect and add the forked fiber to the FiberSet. When the fiber completes, it will be removed from the FiberSet.
Signature
export declare const run: {
<A, E>(
self: FiberSet<A, E>
): <R, XE extends E, XA extends A>(
effect: Effect.Effect<XA, XE, R>
) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
<A, E, R, XE extends E, XA extends A>(
self: FiberSet<A, E>,
effect: Effect.Effect<XA, XE, R>
): 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 FiberSet.
Signature
export declare const runtime: <A, E>(
self: FiberSet<A, E>
) => <R = never>() => Effect.Effect<
<XE extends E, XA extends A>(
effect: Effect.Effect<XA, XE, R>,
options?: Runtime.RunForkOptions | undefined
) => Fiber.RuntimeFiber<XA, XE>,
never,
R
>
Example
import { Context, Effect, FiberSet } from "effect"
interface Users {
readonly _: unique symbol
}
const Users = Context.GenericTag<
Users,
{
getAll: Effect.Effect<Array<unknown>>
}
>("Users")
Effect.gen(function* (_) {
const set = yield* _(FiberSet.make())
const run = yield* _(FiberSet.runtime(set)<Users>())
// run some effects and add the fibers to the set
run(Effect.andThen(Users, (_) => _.getAll))
}).pipe(
Effect.scoped // The fibers will be interrupted when the scope is closed
)
Added in v2.0.0
size
Signature
export declare const size: <A, E>(self: FiberSet<A, E>) => Effect.Effect<number>
Added in v2.0.0
unsafeAdd
Add a fiber to the FiberSet. When the fiber completes, it will be removed.
Signature
export declare const unsafeAdd: {
<A, E, XE extends E, XA extends A>(
fiber: Fiber.RuntimeFiber<XA, XE>,
options?: { readonly interruptAs?: FiberId.FiberId | undefined } | undefined
): (self: FiberSet<A, E>) => void
<A, E, XE extends E, XA extends A>(
self: FiberSet<A, E>,
fiber: Fiber.RuntimeFiber<XA, XE>,
options?: { readonly interruptAs?: FiberId.FiberId | undefined } | undefined
): void
}
Added in v2.0.0