Hyperlinkv0.8.0-beta.28

TxQueue

TxQueue.failconsteffect/TxQueue.ts:1162
<E>(error: E): <A>(self: TxEnqueue<A, E>) => Effect.Effect<boolean>
<A, E>(self: TxEnqueue<A, E>, error: E): Effect.Effect<boolean>

Fails the queue with the specified error, discarding any buffered items.

Details

The queue transitions directly to done with Cause.fail(error). Returns false if the queue was already closing or done.

Example (Failing queues)

import { Effect, TxQueue } from "effect"

const program = Effect.gen(function*() {
  const queue = yield* TxQueue.bounded<number, string>(10)

  // Fail the queue with an error
  const result = yield* TxQueue.fail(queue, "connection lost")
  console.log(result) // true
})
combinators
Source effect/TxQueue.ts:116220 lines
export const fail: {
  <E>(error: E): <A>(self: TxEnqueue<A, E>) => Effect.Effect<boolean>
  <A, E>(self: TxEnqueue<A, E>, error: E): Effect.Effect<boolean>
} = dual(
  2,
  <A, E>(self: TxEnqueue<A, E>, error: E): Effect.Effect<boolean> =>
    Effect.gen(function*() {
      const state = yield* TxRef.get(self.stateRef)

      if (state._tag !== "Open") {
        return false // Already closing/done
      }

      // Fail transitions directly to Done, clearing items
      yield* TxChunk.set(self.items, Chunk.empty())
      yield* TxRef.set(self.stateRef, { _tag: "Done", cause: Cause.fail(error) })

      return true
    }).pipe(Effect.tx)
)