úÎ1r0Y   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.  A right fold over a receiver. fold (:) is quite similar to  getChanContents#. The one difference is that that fold does not . produce any observable side-effects on the  ReceivePort ; unlike  getChanContents any messages observed by fold are not removed  from the port. Note that the type of ) implies that the folding function needs M to be sufficiently non-strict, otherwise the result cannot be productive.  Traverse a   directly. Avoids the outer   overhead of calling   over and over. 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.2.0.1Control.Concurrent.Chan.Split,Control.Concurrent.Chan.Split.Implementation&Control.Concurrent.Chan.Split.Internal ReceivePortSendPortnew newSendPortlisten duplicatereceivesendfoldsendManysplitfoldListListbaseGHC.MVarMVarrp_refrp_lockItemwithLock