Hyperlinkv0.8.0-beta.28

TxPriorityQueue

TxPriorityQueue.takeconsteffect/TxPriorityQueue.ts:376
<A>(self: TxPriorityQueue<A>): Effect.Effect<A>

Takes the smallest element from the queue. Retries if the queue is empty.

Example (Taking the next value)

import { Effect, Order, TxPriorityQueue } from "effect"

const program = Effect.gen(function*() {
  const pq = yield* TxPriorityQueue.fromIterable(Order.Number, [3, 1, 2])
  const first = yield* TxPriorityQueue.take(pq)
  console.log(first) // 1
})
mutations
export const take = <A>(self: TxPriorityQueue<A>): Effect.Effect<A> =>
  Effect.gen(function*() {
    const chunk = yield* TxRef.get(self.ref)
    const head = C.head(chunk)
    if (O.isNone(head)) {
      return yield* Effect.txRetry
    }
    yield* TxRef.set(self.ref, C.drop(chunk, 1))
    return head.value
  }).pipe(Effect.tx)