Portability | non-portable (GHC STM, DeriveDataTypeable) |
---|---|
Stability | experimental |
Maintainer | wren@community.haskell.org |
A version of Control.Concurrent.STM.TChan where the queue is
closeable. This is similar to a TChan (Maybe a)
with a
monotonicity guarantee that once there's a Nothing
there will
always be Nothing
.
- data TMChan a
- newTMChan :: STM (TMChan a)
- newTMChanIO :: IO (TMChan a)
- dupTMChan :: TMChan a -> STM (TMChan a)
- readTMChan :: TMChan a -> STM (Maybe a)
- tryReadTMChan :: TMChan a -> STM (Maybe (Maybe a))
- peekTMChan :: TMChan a -> STM (Maybe a)
- tryPeekTMChan :: TMChan a -> STM (Maybe (Maybe a))
- writeTMChan :: TMChan a -> a -> STM ()
- unGetTMChan :: TMChan a -> a -> STM ()
- closeTMChan :: TMChan a -> STM ()
- isClosedTMChan :: TMChan a -> STM Bool
- isEmptyTMChan :: TMChan a -> STM Bool
The TMChan type
TMChan
is an abstract type representing a closeable FIFO
channel.
Creating TMChans
newTMChanIO :: IO (TMChan a)Source
IO
version of newTMChan
. This is useful for creating
top-level TMChan
s using unsafePerformIO
, because using
atomically
inside unsafePerformIO
isn't possible.
dupTMChan :: TMChan a -> STM (TMChan a)Source
Duplicate a TMChan
: the duplicate channel begins empty, but
data written to either channel from then on will be available
from both, and closing one copy will close them all. Hence this
creates a kind of broadcast channel, where data written by anyone
is seen by everyone else.
Reading from TMChans
readTMChan :: TMChan a -> STM (Maybe a)Source
Read the next value from the TMChan
, retrying if the channel
is empty (and not closed). We return Nothing
immediately if
the channel is closed and empty.
tryReadTMChan :: TMChan a -> STM (Maybe (Maybe a))Source
A version of readTMChan
which does not retry. Instead it
returns Just Nothing
if the channel is open but no value is
available; it still returns Nothing
if the channel is closed
and empty.
peekTMChan :: TMChan a -> STM (Maybe a)Source
Get the next value from the TMChan
without removing it,
retrying if the channel is empty.
tryPeekTMChan :: TMChan a -> STM (Maybe (Maybe a))Source
A version of peekTMChan
which does not retry. Instead it
returns Just Nothing
if the channel is open but no value is
available; it still returns Nothing
if the channel is closed
and empty.
Writing to TMChans
writeTMChan :: TMChan a -> a -> STM ()Source
Write a value to a TMChan
, retrying if the channel is full.
If the channel is closed then the value is silently discarded.
Use isClosedTMChan
to determine if the channel is closed before
writing, as needed.
unGetTMChan :: TMChan a -> a -> STM ()Source
Put a data item back onto a channel, where it will be the next
item read. If the channel is closed then the value is silently
discarded; you can use peekTMChan
to circumvent this in certain
circumstances.
Closing TMChans
closeTMChan :: TMChan a -> STM ()Source
Closes the TMChan
, preventing any further writes.
Predicates
isClosedTMChan :: TMChan a -> STM BoolSource
Returns True
if the supplied TMChan
has been closed.
isEmptyTMChan :: TMChan a -> STM BoolSource
Returns True
if the supplied TMChan
is empty.