Contains a combinator for concurrently joining a producer and a consumer, such that the producer may continue to produce (up to the queue size) as the consumer is concurrently consuming.
Concurrently join the producer and consumer, using a bounded queue of the given size. The producer will block when the queue is full, if it is producing faster than the consumers is taking from it. Likewise, if the consumer races ahead, it will block until more input is available.
Exceptions are properly managed and propagated between the two sides, so the net effect should be equivalent to not using buffer at all, save for the concurrent interleaving of effects.