import { concreteTPriorityQueue } from "@effect/core/stm/TPriorityQueue/operations/_internal/InternalTPriorityQueue" /** * Takes a value from the queue, returning `None` if there is not a value in * the queue. * * @tsplus getter effect/core/stm/TPriorityQueue takeMaybe */ export function takeMaybe(self: TPriorityQueue): USTM> { return STM.Effect((journal) => { concreteTPriorityQueue(self) const map = self.map.unsafeGet(journal) return map.headMaybe.flatMap((tuple) => { const a = tuple[1].tail.flatMap((c) => Maybe.fromPredicate(c, (_) => _.isNonEmpty)) const k = tuple[0] self.map.unsafeSet(a._tag === "None" ? map.remove(k) : map.set(k, a.value), journal) return tuple[1].head }) }) }