stm-chans- Additional types of channels for STM.

Portabilitynon-portable (GHC STM, CPP)
Safe HaskellSafe-Infered




Compatibility layer for older versions of the stm library. Namely, we define tryReadTChan, peekTChan, and tryPeekTChan which stm-X.X.X lacks. These implementations are less efficient than the package versions due to the TChan type being abstract. However, this module uses Cabal-style CPP macros in order to use the package versions when available.


The TChan type

data TChan a

TChan is an abstract type representing an unbounded FIFO channel.


Creating TChans

newTChan :: STM (TChan a)

Build and returns a new instance of TChan

newTChanIO :: IO (TChan a)

IO version of newTChan. This is useful for creating top-level TChans using unsafePerformIO, because using atomically inside unsafePerformIO isn't possible.

dupTChan :: TChan a -> STM (TChan a)

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.

Reading from TChans

readTChan :: TChan a -> STM a

Read the next value from the TChan.

tryReadTChan :: TChan a -> STM (Maybe a)Source

A version of readTChan which does not retry. Instead it returns Nothing if no value is available.

peekTChan :: TChan a -> STM aSource

Get the next value from the TChan without removing it, retrying if the channel is empty.

tryPeekTChan :: TChan a -> STM (Maybe a)Source

A version of peekTChan which does not retry. Instead it returns Nothing if no value is available.

Writing to TChans

unGetTChan :: TChan a -> a -> STM ()

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

writeTChan :: TChan a -> a -> STM ()

Write a value to a TChan.


isEmptyTChan :: TChan a -> STM Bool

Returns True if the supplied TChan is empty.