| Portability | non-portable (GHC STM, CPP) |
|---|---|
| Stability | experimental |
| Maintainer | wren@community.haskell.org |
Control.Concurrent.STM.TChan.Compat
Description
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.
- data TChan a
- newTChan :: STM (TChan a)
- newTChanIO :: IO (TChan a)
- dupTChan :: TChan a -> STM (TChan a)
- readTChan :: TChan a -> STM a
- tryReadTChan :: TChan a -> STM (Maybe a)
- peekTChan :: TChan a -> STM a
- tryPeekTChan :: TChan a -> STM (Maybe a)
- unGetTChan :: TChan a -> a -> STM ()
- writeTChan :: TChan a -> a -> STM ()
- isEmptyTChan :: TChan a -> STM Bool
The TChan type
Creating TChans
newTChanIO :: IO (TChan a)
IO version of newTChan. This is useful for creating top-level
TChans using System.IO.Unsafe.unsafePerformIO, because using
atomically inside System.IO.Unsafe.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
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.