Hyperlinkv0.8.0-beta.28

Queue

Queue.peekconsteffect/Queue.ts:1471
<A, E>(self: Dequeue<A, E>): Effect<A, E>

Peeks at the next item without removing it.

Details

Blocks until an item is available. If the queue is done or fails, the error is propagated.

Example (Peeking at the next value)

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

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

  // Peek at the next item without removing it
  const item = yield* Queue.peek(queue)
  console.log(item) // 42
})
taking
Source effect/Queue.ts:147110 lines
export const peek = <A, E>(self: Dequeue<A, E>): Effect<A, E> =>
  internalEffect.suspend(() => {
    if (self.state._tag === "Done") {
      return self.state.exit
    }
    if (self.messages.length > 0 && self.messages.head) {
      return internalEffect.succeed(self.messages.head.array[self.messages.head.offset])
    }
    return internalEffect.andThen(awaitTake(self), peek(self))
  })