1f0    leon@melding-monads.comNone  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 messages written to this channel before a reader is ing @ will be eligible for garbage collection. Note that one can  one can implement  in terms of  by throwing away the  9 and letting it be garbage collected, and that one can  implement  in terms of  and .  Create a new  ReceivePort& attached the same channel as a given  SendPort. This  ReceivePort" starts out empty, and remains so * until more messages 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. HFetch a message from a channel. If no message is available, it blocks 2 until one is. Can be used in conjunction with System.Timeout. HSend a message 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 D possible that the (non-)evaluation of pure values can cause race 1 conditions inside IO computations. The safer  uses   to avoid this issue. AAtomically send many messages at once. Note that this function M forces the spine of the list beforehand to minimize the critical section, M which also helps prevent exceptions at inopportune times. Trying to send K an infinite list will never send anything, though it will allocate and + retain a lot of memory trying to do so. >This function splits an existing channel in two; associating > a new receive port with the old send port, and a new send @ port with the existing receive ports. The new receive port > starts out empty, while the existing receive ports retain  any unprocessed messages.  split.png          leon@melding-monads.comNone  leon@melding-monads.comNone          split-channel-0.1.2.3Control.Concurrent.Chan.Split,Control.Concurrent.Chan.Split.Implementation&Control.Concurrent.Chan.Split.Internal ReceivePortSendPortnew newSendPortlisten duplicatereceivesendfold unsafeFoldsendManysplitItemList