| 3651 | ), |
| 3652 | Effect.map(([left, right]) => { |
| 3653 | const process = ( |
| 3654 | leftDone: boolean, |
| 3655 | rightDone: boolean |
| 3656 | ): Channel.Channel<Chunk.Chunk<A | A2>, boolean, E | E2 | E3, E | E2 | E3, void, unknown, R> => |
| 3657 | core.readWithCause({ |
| 3658 | onInput: (bool: boolean) => { |
| 3659 | if (bool && !leftDone) { |
| 3660 | return pipe( |
| 3661 | core.fromEffect(Handoff.take(left)), |
| 3662 | core.flatMap(InternalTake.match({ |
| 3663 | onEnd: () => rightDone ? core.void : process(true, rightDone), |
| 3664 | onFailure: core.failCause, |
| 3665 | onSuccess: (chunk) => pipe(core.write(chunk), core.flatMap(() => process(leftDone, rightDone))) |
| 3666 | })) |
| 3667 | ) |
| 3668 | } |
| 3669 | if (!bool && !rightDone) { |
| 3670 | return pipe( |
| 3671 | core.fromEffect(Handoff.take(right)), |
| 3672 | core.flatMap(InternalTake.match({ |
| 3673 | onEnd: () => leftDone ? core.void : process(leftDone, true), |
| 3674 | onFailure: core.failCause, |
| 3675 | onSuccess: (chunk) => pipe(core.write(chunk), core.flatMap(() => process(leftDone, rightDone))) |
| 3676 | })) |
| 3677 | ) |
| 3678 | } |
| 3679 | return process(leftDone, rightDone) |
| 3680 | }, |
| 3681 | onFailure: core.failCause, |
| 3682 | onDone: () => core.void |
| 3683 | }) |
| 3684 | return pipe( |
| 3685 | toChannel(decider), |
| 3686 | channel.concatMap(channel.writeChunk), |