stm-chans-3.0.0.9: Additional types of channels for STM.
CopyrightCopyright (c) 2011--2021 wren gayle romano
LicenseBSD
Maintainerwren@cpan.org
Stabilityprovisional
Portabilitynon-portable (GHC STM, DeriveDataTypeable)
Safe HaskellSafe
LanguageHaskell2010

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

The TMQueue type

data TMQueue a Source #

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 Bool Source #

Returns True if the supplied TMQueue has been closed.

isEmptyTMQueue :: TMQueue a -> STM Bool Source #

Returns True if the supplied TMQueue is empty.