Copyright | Copyright (c) 2011--2015 wren gayle romano |
---|---|
License | BSD |
Maintainer | wren@community.haskell.org |
Stability | provisional |
Portability | non-portable (GHC STM, DeriveDataTypeable) |
Safe Haskell | Trustworthy |
Language | Haskell98 |
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)
- newBroadcastTMChan :: STM (TMChan a)
- newBroadcastTMChanIO :: IO (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.
newBroadcastTMChan :: STM (TMChan a) Source
Like newBroadcastTChan
.
Since: 2.1.0
newBroadcastTMChanIO :: IO (TMChan a) Source
IO
version of newBroadcastTMChan
.
Since: 2.1.0
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
. 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 Bool Source
Returns True
if the supplied TMChan
has been closed.
isEmptyTMChan :: TMChan a -> STM Bool Source
Returns True
if the supplied TMChan
is empty.