stm-chans-3.0.0: Additional types of channels for STM.

Portabilitynon-portable (GHC STM, DeriveDataTypeable)
Stabilityprovisional
Maintainerwren@community.haskell.org
Safe HaskellTrustworthy

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

Synopsis

The TMQueue type

data TMQueue a Source

TMQueue is an abstract type representing a closeable FIFO queue.

Instances

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.