úÎ'     SafeOT 1A self-contained pipeline that is ready to be run#A pipe that can only consume values#A pipe that can only produce values (A data type with no exposed constructors The base type for pipes a.The type of input received from upstream pipesb0The type of output delivered to downstream pipesmThe base monadr$The type of the monad's final resultóThe Pipe type is partly inspired by Mario Blazevic's Coroutine in his concurrency article from Issue 19 of The Monad Reader and partly inspired by the Trace data type from "A Language Based Approach to Unifying Events and Threads". (Wait for input from upstream within the   monad:  blocks until input is ready. "Pass output downstream within the   monad: + blocks until the output has been received. #Convert a pure function into a pipe 2pipe = forever $ do x <- await yield (f x)The , pipe silently discards all input fed to it.Run the  : monad transformer, converting it back into the base monad¤ will not work on a pipe that has loose input or output ends. If your pipe is still generating unhandled output, handle it. I choose not to automatically Y output for you, because that is only one of many ways to deal with unhandled output.          9 9 9 9 Safe         pipes-1.0-87kReLIsdzpI5LEhjCNEzIControl.Pipe.Common Control.PipeStrictunStrictLazyunLazyPipelineConsumerProducerZeroPipeawaityieldpipediscardidP<+<<-<>+>>->runPipe$fCategoryTYPEStrict$fCategoryTYPELazy$fMonadTransPipe $fMonadPipe$fApplicativePipe $fFunctorPipePureMAwaitYield