Hyperlinkv0.8.0-beta.28

Channel

Channel.acquireReleaseconsteffect/Channel.ts:606
<Z>(
  release: (
    z: Z,
    e: Exit.Exit<unknown, unknown>
  ) => Effect.Effect<unknown>
): <E, R>(
  self: Effect.Effect<Z, E, R>
) => Channel<Z, E, void, unknown, unknown, unknown, R>
<Z, E, R>(
  self: Effect.Effect<Z, E, R>,
  release: (
    z: Z,
    e: Exit.Exit<unknown, unknown>
  ) => Effect.Effect<unknown>
): Channel<Z, E, void, unknown, unknown, unknown, R>

Acquires a resource, emits the acquired value as a single channel element, and registers release in the channel scope.

Details

The release action runs when the channel scope closes and receives the scope exit. If acquisition fails, no element is emitted and release is not registered.

Example (Managing resources with acquire-release)

import { Channel, Effect } from "effect"

const channel = Channel.acquireRelease(
  Effect.succeed("resource"),
  (resource, exit) => Effect.log(`Released: ${resource}`)
)
constructors
Source effect/Channel.ts:60616 lines
export const acquireRelease: {
  <Z>(
    release: (z: Z, e: Exit.Exit<unknown, unknown>) => Effect.Effect<unknown>
  ): <E, R>(self: Effect.Effect<Z, E, R>) => Channel<Z, E, void, unknown, unknown, unknown, R>
  <Z, E, R>(
    self: Effect.Effect<Z, E, R>,
    release: (z: Z, e: Exit.Exit<unknown, unknown>) => Effect.Effect<unknown>
  ): Channel<Z, E, void, unknown, unknown, unknown, R>
} = dual(2, <Z, E, R>(
  self: Effect.Effect<Z, E, R>,
  release: (z: Z, e: Exit.Exit<unknown, unknown>) => Effect.Effect<unknown>
): Channel<Z, E, void, unknown, unknown, unknown, R> =>
  unwrap(Effect.map(
    Effect.acquireRelease(self, release),
    succeed
  )))