Proposal: split Chan and TChan into read and write ends

Henning Thielemann lemming at
Sat Oct 27 09:52:13 CEST 2012

On Fri, 26 Oct 2012, Brandon Simmons wrote:

> Hi everybody,
> Just discovered all the great discussion here, and although my
> google-fu turned up no prior discussions on this subject, I apologize
> if it has already been discussed.
> I propose that Chan and TChan should be implemented as a pair of read
> and write ends, initialized as follows:
>    newSplitChan :: IO (InChan a, OutChan a)
> I've implemented this already here:
> . You can ignore the
> type classes I've defined; they're there for my own reasons and not
> part of the proposal.

I have implemented something similar in plain Haskell 98:

  When using it I found that often there is a clear distinction between 
input and output end of a channel but sometimes it is not. E.g. a thread 
might send messages to itself. Of course I could pass around both channel 
ends in this case.
  I don't think it is worth to break the API. I am happy with separate 
packages. If the implementors of Control.Concurrent think that the 
implementations become cleaner then they might add new modules. This would 
allow for a smooth transition.

More information about the Libraries mailing list