Alternative implementation of the pipes concept.
The Pipe type is
Pipe lo a b u m r, where:
ais the input type
bis the output type
uis the upstream return type
mis the base monad
ris the return type
The primitive stream operations are:
tryAwaitwaits for upstream
yieldyields a value to downstream
await operation is provided via
EitherT, and a corresponding
EitherT at the top level.
Exceptions and finalization are to be decided.
simulatePipe is the fundamental abstraction for running a
Pipe. The more
runPipe is provided as a specialization.