Chan package:rebase
Chan is an abstract type representing an unbounded FIFO
channel.
TChan is an abstract type representing an unbounded FIFO
channel.
Clone a
TChan: similar to dupTChan, but the cloned channel
starts with the same content available as the original channel.
Duplicate a
Chan: the duplicate channel begins empty, but data
written to either channel from then on will be available from both.
Hence this creates a kind of broadcast channel, where data written by
anyone is seen by everyone else.
(Note that a duplicated channel is not equal to its original. So:
fmap (c /=) $ dupChan c returns
True for all
c.)
Duplicate a
TChan: the duplicate channel begins empty, but data
written to either channel from then on will be available from both.
Hence this creates a kind of broadcast channel, where data written by
anyone is seen by everyone else.
Return a lazy list representing the contents of the supplied
Chan, much like
hGetContents.
Create a write-only
TChan. More precisely,
readTChan
will
retry even after items have been written to the channel.
The only way to read a broadcast channel is to duplicate it with
dupTChan.
Consider a server that broadcasts messages to clients:
serve :: TChan Message -> Client -> IO loop
serve broadcastChan client = do
myChan <- dupTChan broadcastChan
forever $ do
message <- readTChan myChan
send client message
The problem with using
newTChan to create the broadcast channel
is that if it is only written to and never read, items will pile up in
memory. By using
newBroadcastTChan to create the broadcast
channel, items can be garbage collected after clients have seen them.
Build and returns a new instance of
Chan.
Build and return a new instance of
TChan
Get the next value from the TChan without removing it,
retrying if the channel is empty.
Read the next value from the
Chan. Blocks when the channel is
empty. Since the read end of a channel is an
MVar, this
operation inherits fairness guarantees of
MVars (e.g. threads
blocked in this operation are woken up in FIFO order).
Throws
BlockedIndefinitelyOnMVar when the channel is empty and
no other thread holds a reference to the channel.
Read the next value from the
TChan.
A version of
peekTChan which does not retry. Instead it returns
Nothing if no value is available.
A version of
readTChan which does not retry. Instead it returns
Nothing if no value is available.
Put a data item back onto a channel, where it will be the next item
read.
Write an entire list of items to a
Chan.
Write a value to a
TChan.