;u:  leon@melding-monads.com Safe-Infered  ReceivePorts3 represent the other end of a channel. A channel  can have many  ReceivePorts*, which all receive the same messages in  a publish/!subscribe like manner. A single  ReceivePort can be used F from multiple threads, where every message will be delivered to a  single thread in a push/pull like manner. Use  to fetch  messages from the channel.  SendPorts7 represent one end of the channel. There is only one  SendPort< per channel, though it can be used from multiple threads. - Messages can be sent to the channel using . Creates a new channel and a (SendPort, ReceivePort) pair representing ! the two sides of the channel. /Produces a new channel that initially has zero  ReceivePorts. ; Any elements written to this channel before a reader is ing , will be eligible for garbage collection.  Create a new  ReceivePort& attached the same channel as a given  SendPort. This  ReceivePort" starts out empty, and remains so * until more elements are written to the SendPort.  Create a new  ReceivePort) attached to the same channel as another   ReceivePort3. These two ports will receive the same messages. B Any messages in the channel that have not been consumed by the 3 existing port will also appear in the new port. IFetch an element from a channel. If no element is available, it blocks 2 until one is. Can be used in conjunction with System.Timeout. ISend an element to a channel. This is asynchronous and does not block. 3A right fold over a receiver, a generalization of getChanContents  where getChanContents = fold (:). Note that the type of  K implies that the folding function needs to be sufficienctly non-strict, . otherwise the result cannot be productive.  7 should usually be called only on readers that are not G subsequently used in other channel operations. Otherwise it may be E possible that the (non-)evaluation of pure values will cause race 1 conditions inside IO computations. The safer  uses   to satisfy this condition.            leon@melding-monads.com Safe-InferedAAtomically send many messages at once. Note that this function J minimizes the critical section and forces the spine of the list, which F helps prevent exceptions at inopportune times. Might be useful in L improving throughput of SendPorts with high contention, or for ensuring 0 that two messages appear next to each other. DAtomically sends a message on a channel, and then associates a new  channel with the SendPort. This prevents the existing  ReceivePorts J on the old channel from receiving further messages, and creates a new M ReceivePort for the new channel. A possible use case is to transparently J replace the backend of a service without effecting the clients of that  service. /This is probably not a good idea, however. It's probably better to H put the SendPort in an MVar instead. This introduces an extra layer D of indirection, but also allows you to be selective about which 3 senders see the effect, by providing either an MVar to the SendPort  or providing the SendPort directly. CFor example, the service might consist of multiple threads, some F of which may send messages on the same channel as the clients. It E would probably be a bug to switch the channel that those internal 3 threads are using: so the clients would use an  (MVar (SendPort RequestOrInternalMessage) whereas the internal 0 threads would have direct access to the same SendPort.   leon@melding-monads.com Safe-Infered        split-channel-0.1.0.0Control.Concurrent.Chan.Split,Control.Concurrent.Chan.Split.Implementation&Control.Concurrent.Chan.Split.Internal ReceivePortSendPortnew newSendPortlisten duplicatereceivesendfold unsafeFoldItemListsendManysendAndResetChannel