|Copyright||(c) The University of Glasgow 2001|
|License||BSD-style (see the file libraries/base/LICENSE)|
The channels are implemented with
MVars and therefore inherit all the caveats that apply to
MVars (possibility of races, deadlocks etc). The stm (software transactional memory) library has a more robust implementation of channels called
Chan is an abstract type representing an unbounded FIFO channel.
Build and returns a new instance of
writeChan :: Chan a -> a -> IO () Source
Write a value to a
readChan :: Chan a -> IO a Source
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).
BlockedIndefinitelyOnMVar when the channel is empty and no other thread holds a reference to the channel.
dupChan :: Chan a -> IO (Chan a) Source
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
getChanContents :: Chan a -> IO [a] Source
Return a lazy list representing the contents of the supplied
Chan, much like
writeList2Chan :: Chan a -> [a] -> IO () Source
Write an entire list of items to a
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).