Hyperlinkv0.8.0-beta.28

Effect

Effect.scopedconsteffect/Effect.ts:6432
<A, E, R>(self: Effect<A, E, R>): Effect<A, E, Exclude<R, Scope>>

Runs an effect with a scope that closes when the effect completes.

When to use

Use to acquire scoped resources for the duration of a single workflow.

Details

Finalizers for resources acquired inside the workflow run as soon as the workflow completes, whether by success, failure, or interruption.

Example (Running a scoped acquisition)

import { Console, Effect } from "effect"

const resource = Effect.acquireRelease(
  Console.log("Acquiring resource").pipe(Effect.as("resource")),
  () => Console.log("Releasing resource")
)

const program = Effect.scoped(
  Effect.gen(function*() {
    const res = yield* resource
    yield* Console.log(`Using ${res}`)
    return res
  })
)

Effect.runFork(program)
// Output: "Acquiring resource"
// Output: "Using resource"
// Output: "Releasing resource"
resource management
Source effect/Effect.ts:64323 lines
export const scoped: <A, E, R>(
  self: Effect<A, E, R>
) => Effect<A, E, Exclude<R, Scope>> = internal.scoped
Referenced by 3 symbols