<A, E>(self: FiberHandle<A, E>): Effect.Effect<
Option.Option<Fiber.Fiber<A, E>>
>Retrieves the fiber from the FiberHandle effectfully.
Example (Reading the current fiber)
import { Effect, Fiber, FiberHandle } from "effect"
Effect.gen(function*() {
const handle = yield* FiberHandle.make()
// Add a fiber
yield* FiberHandle.run(handle, Effect.succeed("hello"))
// Get the current fiber if present
const fiber = yield* FiberHandle.get(handle)
if (fiber._tag === "Some") {
const result = yield* Fiber.await(fiber.value)
console.log(result) // "hello"
}
})export function function get<A, E>(
self: FiberHandle<A, E>
): Effect.Effect<Option.Option<Fiber.Fiber<A, E>>>
Retrieves the fiber from the FiberHandle effectfully.
Example (Reading the current fiber)
import { Effect, Fiber, FiberHandle } from "effect"
Effect.gen(function*() {
const handle = yield* FiberHandle.make()
// Add a fiber
yield* FiberHandle.run(handle, Effect.succeed("hello"))
// Get the current fiber if present
const fiber = yield* FiberHandle.get(handle)
if (fiber._tag === "Some") {
const result = yield* Fiber.await(fiber.value)
console.log(result) // "hello"
}
})
get<function (type parameter) A in get<A, E>(self: FiberHandle<A, E>): Effect.Effect<Option.Option<Fiber.Fiber<A, E>>>A, function (type parameter) E in get<A, E>(self: FiberHandle<A, E>): Effect.Effect<Option.Option<Fiber.Fiber<A, E>>>E>(self: FiberHandle<A, E>(parameter) self: {
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;
}
self: 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 get<A, E>(self: FiberHandle<A, E>): Effect.Effect<Option.Option<Fiber.Fiber<A, E>>>A, function (type parameter) E in get<A, E>(self: FiberHandle<A, E>): Effect.Effect<Option.Option<Fiber.Fiber<A, E>>>E>): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<import OptionOption.type Option<A> = Option.None<A> | Option.Some<A>The Option data type represents optional values. An Option<A> is either
Some<A>, containing a value of type A, or None, representing absence.
When to use
Use to represent initial values that may not yet exist
- Returning from partial functions (not defined for all inputs)
- Managing optional fields in data structures
Namespace containing utility types for Option.
When to use
Use to access type-level helpers associated with Option.
Option<import FiberFiber.type Fiber.Fiber = /*unresolved*/ anyFiber<function (type parameter) A in get<A, E>(self: FiberHandle<A, E>): Effect.Effect<Option.Option<Fiber.Fiber<A, E>>>A, function (type parameter) E in get<A, E>(self: FiberHandle<A, E>): Effect.Effect<Option.Option<Fiber.Fiber<A, E>>>E>>> {
return import EffectEffect.suspend(() => import EffectEffect.succeed(function getUnsafe<A, E>(
self: FiberHandle<A, E>
): Option.Option<Fiber.Fiber<A, E>>
Retrieves the fiber from the FiberHandle synchronously.
When to use
Use when synchronous inspection of the current fiber is needed and an
Option result is enough outside the Effect workflow.
Example (Reading the current fiber unsafely)
import { Effect, FiberHandle } from "effect"
Effect.gen(function*() {
const handle = yield* FiberHandle.make()
// No fiber initially
const emptyFiber = FiberHandle.getUnsafe(handle)
console.log(emptyFiber._tag === "None") // true
// Add a fiber
yield* FiberHandle.run(handle, Effect.succeed("hello"))
const fiber = FiberHandle.getUnsafe(handle)
console.log(fiber._tag === "Some") // true
})
getUnsafe(self: FiberHandle<A, E>(parameter) self: {
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;
}
self)))
}