| Portability | non-portable (GHC STM, DeriveDataTypeable) |
|---|---|
| Stability | provisional |
| Maintainer | wren@community.haskell.org |
| Safe Haskell | Trustworthy |
Control.Concurrent.STM.TMQueue
Contents
Description
A version of Control.Concurrent.STM.TQueue where the queue is
closeable. This is similar to a TQueue (Maybe a) with a
monotonicity guarantee that once there's a Nothing there will
always be Nothing.
Since: 2.0.0
- data TMQueue a
- newTMQueue :: STM (TMQueue a)
- newTMQueueIO :: IO (TMQueue a)
- readTMQueue :: TMQueue a -> STM (Maybe a)
- tryReadTMQueue :: TMQueue a -> STM (Maybe (Maybe a))
- peekTMQueue :: TMQueue a -> STM (Maybe a)
- tryPeekTMQueue :: TMQueue a -> STM (Maybe (Maybe a))
- writeTMQueue :: TMQueue a -> a -> STM ()
- unGetTMQueue :: TMQueue a -> a -> STM ()
- closeTMQueue :: TMQueue a -> STM ()
- isClosedTMQueue :: TMQueue a -> STM Bool
- isEmptyTMQueue :: TMQueue a -> STM Bool
The TMQueue type
TMQueue is an abstract type representing a closeable FIFO
queue.
Creating TMQueues
newTMQueue :: STM (TMQueue a)Source
Build and returns a new instance of TMQueue.
newTMQueueIO :: IO (TMQueue a)Source
IO version of newTMQueue. This is useful for creating
top-level TMQueues using unsafePerformIO, because using
atomically inside unsafePerformIO isn't possible.
Reading from TMQueues
readTMQueue :: TMQueue a -> STM (Maybe a)Source
Read the next value from the TMQueue, retrying if the queue
is empty (and not closed). We return Nothing immediately if
the queue is closed and empty.
tryReadTMQueue :: TMQueue a -> STM (Maybe (Maybe a))Source
A version of readTMQueue which does not retry. Instead it
returns Just Nothing if the queue is open but no value is
available; it still returns Nothing if the queue is closed
and empty.
peekTMQueue :: TMQueue a -> STM (Maybe a)Source
Get the next value from the TMQueue without removing it,
retrying if the queue is empty.
tryPeekTMQueue :: TMQueue a -> STM (Maybe (Maybe a))Source
A version of peekTMQueue which does not retry. Instead it
returns Just Nothing if the queue is open but no value is
available; it still returns Nothing if the queue is closed
and empty.
Writing to TMQueues
writeTMQueue :: TMQueue a -> a -> STM ()Source
Write a value to a TMQueue. If the queue is closed then the
value is silently discarded. Use isClosedTMQueue to determine
if the queue is closed before writing, as needed.
unGetTMQueue :: TMQueue a -> a -> STM ()Source
Put a data item back onto a queue, where it will be the next
item read. If the queue is closed then the value is silently
discarded; you can use peekTMQueue to circumvent this in certain
circumstances.
Closing TMQueues
closeTMQueue :: TMQueue a -> STM ()Source
Closes the TMQueue, preventing any further writes.
Predicates
isClosedTMQueue :: TMQueue a -> STM BoolSource
Returns True if the supplied TMQueue has been closed.
isEmptyTMQueue :: TMQueue a -> STM BoolSource
Returns True if the supplied TMQueue is empty.