Copyright | (c) The University of Glasgow 2001 |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | [email protected] |
Stability | experimental |
Portability | non-portable (concurrency) |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Unbounded channels.
The channels are implemented with MVar
s and therefore inherit all the
caveats that apply to MVar
s (possibility of races, deadlocks etc). The
stm (software transactional memory) library has a more robust implementation
of channels called TChan
s.
The Chan
type
Chan
is an abstract type representing an unbounded FIFO channel.
Operations
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 MVar
s (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.
dupChan :: Chan a -> IO (Chan a) Source #
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
.)
Stream interface
getChanContents :: Chan a -> IO [a] Source #
Return a lazy list representing the contents of the supplied
Chan
, much like hGetContents
.