Queue with backpressure
const queue = yield* Queue.bounded<string>(3)
yield* Queue.offer(queue, "task-1")
yield* Queue.offer(queue, "task-2")
yield* Queue.offer(queue, "task-3")
4 strategies: bounded (suspends), dropping (silent drop), sliding (drop oldest), unbounded
Type-safe producer/consumer separation: Queue.Enqueue<A> (offer only), Queue.Dequeue<A> (take only)