This module splits Control.Concurrent.Chan into sending and receiving
halves, which allows the type system to more finely constrain program
behavior. As a secondary benefit, messages written to channels with
no receive ports associated with them can be reliably garbage collected.
In addition, this module incorporates several of clean-ups and additions
to the venerable Chan. Most notably, the deprecated thread-unsafe
functions have been removed, the ability to duplicate Receive Ports
has been added, the sendMany operation allows for multiple messages
to be sent atomically, and the split operation turns a single
channel into two.