Primitives

await and yield are the two basic primitives you need to create
Pipes. Because Pipe is a monad, you can assemble them using ordinary
do notation. Since Pipe is also a monad trnasformer, you can use
lift to invoke the base monad. For example: