Hyperlinkv0.8.0-beta.28

TxPriorityQueue

TxPriorityQueue.takeUpToconsteffect/TxPriorityQueue.ts:456
(n: number): <A>(self: TxPriorityQueue<A>) => Effect.Effect<Array<A>>
<A>(self: TxPriorityQueue<A>, n: number): Effect.Effect<Array<A>>

Takes up to n elements from the queue in priority order.

Example (Taking up to a limit)

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

const program = Effect.gen(function*() {
  const pq = yield* TxPriorityQueue.fromIterable(Order.Number, [5, 3, 1, 4, 2])
  const top2 = yield* TxPriorityQueue.takeUpTo(pq, 2)
  console.log(top2) // [1, 2]
})
mutations
export const takeUpTo: {
  (n: number): <A>(self: TxPriorityQueue<A>) => Effect.Effect<Array<A>>
  <A>(self: TxPriorityQueue<A>, n: number): Effect.Effect<Array<A>>
} = dual(
  2,
  <A>(self: TxPriorityQueue<A>, n: number): Effect.Effect<Array<A>> =>
    Effect.map(
      TxRef.modify(self.ref, (chunk) => {
        const taken = C.take(chunk, n)
        const rest = C.drop(chunk, n)
        return [taken, rest]
      }),
      C.toArray
    )
)