Chan is an abstract type representing an unbounded FIFO channel.
Chan: the duplicate channel begins empty, but data written to
either channel from then on will be available from both. Hence this creates
a kind of broadcast channel, where data written by anyone is seen by
(Note that a duplicated channel is not equal to its original.
fmap (c /=) $ dupChan c returns
True for all
Put a data item back onto a channel, where it will be the next item read.