/** * @tsplus getter effect/core/stream/Channel toQueue * @tsplus static effect/core/stream/Channel.Ops toQueue */ export function toQueue( queue: Enqueue, Elem>> ): Channel { return Channel.suspend(toQueueInternal(queue)) } function toQueueInternal( queue: Enqueue, Elem>> ): Channel { return Channel.readWithCause( (elem) => Channel.fromEffect(queue.offer(Either.right(elem))) .flatMap(() => toQueueInternal(queue)), (cause) => Channel.fromEffect(queue.offer(Either.left(Exit.failCause(cause)))), (done) => Channel.fromEffect(queue.offer(Either.left(Exit.succeed(done)))) ) }