| Copyright | Copyright (c) 2011--2021 wren gayle romano |
|---|---|
| License | BSD |
| Maintainer | wren@cpan.org |
| Stability | provisional |
| Portability | non-portable (GHC STM, DeriveDataTypeable) |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Control.Concurrent.STM.TMQueue
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
Synopsis
- 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
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.