Hyperlinkv0.8.0-beta.28

Layer

Layer.buildconsteffect/Layer.ts:674
<RIn, E, ROut>(self: Layer<ROut, E, RIn>): Effect<
  Context.Context<ROut>,
  E,
  RIn | Scope.Scope
>

Builds a layer into a scoped value.

Example (Building a layer into a context)

import { Context, Effect, Layer } from "effect"

class Database extends Context.Service<Database, {
  readonly query: (sql: string) => Effect.Effect<string>
}>()("Database") {}

// Build a layer to get its services
const program = Effect.gen(function*() {
  const dbLayer = Layer.succeed(Database, {
    query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
  })

  // Build the layer into Context - automatically manages scope and memoization
  const context = yield* Layer.build(dbLayer)

  // Extract the specific service from the built layer
  const database = Context.get(context, Database)

  return yield* database.query("SELECT * FROM users")
})
destructors
Source effect/Layer.ts:67410 lines
export const build = <RIn, E, ROut>(
  self: Layer<ROut, E, RIn>
): Effect<Context.Context<ROut>, E, RIn | Scope.Scope> =>
  core.withFiber((fiber) =>
    buildWithMemoMap(
      self,
      CurrentMemoMap.forkOrCreate(fiber.context),
      Context.getUnsafe(fiber.context, Scope.Scope)
    )
  )
Referenced by 1 symbols