| 1569 | } |
| 1570 | |
| 1571 | const await_ = <A, E>(self: Dequeue<A, E>): Effect<void, Exclude<E, Done>> => |
| 1572 | internalEffect.callback<void, Exclude<E, Done>>((resume) => { |
| 1573 | const awaiter = (effect: Effect<void, E>) => resume(Pull.catchDone(effect, () => internalEffect.exitVoid)) |
| 1574 | if (self.state._tag === "Done") { |
| 1575 | return awaiter(self.state.exit) |
| 1576 | } |
| 1577 | self.state.awaiters.add(awaiter) |
| 1578 | return internalEffect.sync(() => { |
| 1579 | if (self.state._tag !== "Done") { |
| 1580 | self.state.awaiters.delete(awaiter) |
| 1581 | } |
| 1582 | }) |
| 1583 | }) |
| 1584 | |
| 1585 | export { |
| 1586 | /** |