Hyperlinkv0.8.0-beta.28

Queue

Queue.intoconsteffect/Queue.ts:1769
<A, E>(self: Enqueue<A, E | Done>): <AX, EX extends E, RX>(
  effect: Effect<AX, EX, RX>
) => Effect<boolean, never, RX>
<AX, E, EX extends E, RX, A>(
  effect: Effect<AX, EX, RX>,
  self: Enqueue<A, E | Done>
): Effect<boolean, never, RX>

Runs an Effect into a Queue, where success ends the queue and failure fails the queue.

Example (Running effects into queues)

import { Cause, Effect, Queue } from "effect"

const program = Effect.gen(function*() {
  const queue = yield* Queue.bounded<number, Cause.Done>(10)

  // Create an effect that succeeds
  const dataProcessing = Effect.gen(function*() {
    yield* Effect.sleep("100 millis")
    return "Processing completed successfully"
  })

  // Pipe the effect into the queue
  // If dataProcessing succeeds, queue ends successfully
  // If dataProcessing fails, queue fails with the error
  const effectIntoQueue = Queue.into(queue)(dataProcessing)

  const wasCompleted = yield* effectIntoQueue
  console.log("Queue operation completed:", wasCompleted) // true

  // Queue state now reflects the effect's outcome
  console.log("Queue state:", queue.state._tag) // "Done"
})
completion
Source effect/Queue.ts:176923 lines
export const into: {
  <A, E>(
    self: Enqueue<A, E | Done>
  ): <AX, EX extends E, RX>(
    effect: Effect<AX, EX, RX>
  ) => Effect<boolean, never, RX>
  <AX, E, EX extends E, RX, A>(
    effect: Effect<AX, EX, RX>,
    self: Enqueue<A, E | Done>
  ): Effect<boolean, never, RX>
} = dual(
  2,
  <AX, E, EX extends E, RX, A>(
    effect: Effect<AX, EX, RX>,
    self: Enqueue<A, E | Done>
  ): Effect<boolean, never, RX> =>
    internalEffect.uninterruptibleMask((restore) =>
      internalEffect.matchCauseEffect(restore(effect), {
        onFailure: (cause) => failCause(self, cause),
        onSuccess: (_) => end(self)
      })
    )
)