<A = unknown, E = unknown>(): Effect.Effect<
FiberHandle<A, E>,
never,
Scope.Scope
>Creates a scoped FiberHandle that can store a single fiber.
Details
When the associated Scope is closed, the contained fiber will be
interrupted. You can add a fiber to the handle using FiberHandle.run, and
the fiber will be automatically removed from the FiberHandle when it
completes.
Example (Creating a scoped fiber handle)
import { Effect, FiberHandle } from "effect"
Effect.gen(function*() {
const handle = yield* FiberHandle.make()
// run some effects
yield* FiberHandle.run(handle, Effect.never)
// this will interrupt the previous fiber
yield* FiberHandle.run(handle, Effect.never)
yield* Effect.sleep(1000)
}).pipe(
Effect.scoped // The fiber will be interrupted when the scope is closed
)export const const make: <
A = unknown,
E = unknown
>() => Effect.Effect<
FiberHandle<A, E>,
never,
Scope.Scope
>
Creates a scoped FiberHandle that can store a single fiber.
Details
When the associated Scope is closed, the contained fiber will be
interrupted. You can add a fiber to the handle using FiberHandle.run, and
the fiber will be automatically removed from the FiberHandle when it
completes.
Example (Creating a scoped fiber handle)
import { Effect, FiberHandle } from "effect"
Effect.gen(function*() {
const handle = yield* FiberHandle.make()
// run some effects
yield* FiberHandle.run(handle, Effect.never)
// this will interrupt the previous fiber
yield* FiberHandle.run(handle, Effect.never)
yield* Effect.sleep(1000)
}).pipe(
Effect.scoped // The fiber will be interrupted when the scope is closed
)
make = <function (type parameter) A in <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope>A = unknown, function (type parameter) E in <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope>E = unknown>(): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<interface FiberHandle<out A = unknown, out E = unknown>Scoped handle that manages at most one fiber, interrupts the current fiber
when the handle's scope closes, and removes managed fibers from the handle
when they complete.
Example (Managing a single fiber)
import { Effect, Fiber, FiberHandle } from "effect"
Effect.gen(function*() {
// Create a FiberHandle that can hold fibers producing strings
const handle = yield* FiberHandle.make<string, never>()
// The handle can store and manage a single fiber
const fiber = yield* FiberHandle.run(handle, Effect.succeed("hello"))
const result = yield* Fiber.await(fiber)
console.log(result) // "hello"
})
FiberHandle<function (type parameter) A in <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope>A, function (type parameter) E in <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope>E>, never, import ScopeScope.Scope> =>
import EffectEffect.acquireRelease(
import EffectEffect.sync(() => const makeUnsafe: <
A = unknown,
E = unknown
>() => FiberHandle<A, E>
makeUnsafe<function (type parameter) A in <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope>A, function (type parameter) E in <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope>E>()),
(handle: FiberHandle<A, E>(parameter) handle: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; fiber: Fiber.Fiber<A, E> | undefined } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
handle) => {
const const state: anystate = handle: FiberHandle<A, E>(parameter) handle: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; fiber: Fiber.Fiber<A, E> | undefined } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
handle.state
if (const state: anystate._tag === "Closed") return import EffectEffect.void
handle: FiberHandle<A, E>(parameter) handle: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; fiber: Fiber.Fiber<A, E> | undefined } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
handle.state = { _tag: string_tag: "Closed" }
return const state: anyconst state: {
_tag: "Open";
fiber: Fiber.Fiber<A, E> | undefined;
}
state.fiber ?
import DeferredDeferred.into(
import EffectEffect.asVoid(import FiberFiber.interruptAs(const state: anyconst state: {
_tag: "Open";
fiber: Fiber.Fiber<A, E> | undefined;
}
state.fiber, const internalFiberId: -1internalFiberId)),
handle: FiberHandle<A, E>(parameter) handle: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; fiber: Fiber.Fiber<A, E> | undefined } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
handle.deferred
) :
import DeferredDeferred.done(handle: FiberHandle<A, E>(parameter) handle: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; fiber: Fiber.Fiber<A, E> | undefined } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
handle.deferred, import ExitExit.void)
}
)