base-4.9.0.0: Basic libraries

Control.Concurrent.Chan

Description

Unbounded channels.

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 TChans.

Synopsis

# The Chan type

data Chan a Source #

Chan is an abstract type representing an unbounded FIFO channel.

Instances

 Eq (Chan a) Source # Methods(==) :: Chan a -> Chan a -> Bool #(/=) :: Chan a -> Chan a -> Bool #

# Operations

newChan :: IO (Chan a) Source #

Build and returns a new instance of Chan.

writeChan :: Chan a -> a -> IO () Source #

Write a value to a Chan.

readChan :: Chan a -> IO a Source #

Read the next value from the Chan.

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.)

unGetChan :: Chan a -> a -> IO () Source #

Deprecated: if you need this operation, use Control.Concurrent.STM.TChan instead. See http://ghc.haskell.org/trac/ghc/ticket/4154 for details

Put a data item back onto a channel, where it will be the next item read.

Deprecated: if you need this operation, use Control.Concurrent.STM.TChan instead. See http://ghc.haskell.org/trac/ghc/ticket/4154 for details

Returns True if the supplied Chan is empty.

# Stream interface

getChanContents :: Chan a -> IO [a] Source #

Return a lazy list representing the contents of the supplied Chan, much like hGetContents.

writeList2Chan :: Chan a -> [a] -> IO () Source #

Write an entire list of items to a Chan.