concurrency-1.11.0.3: Typeclasses, functions, and data types for concurrency and STM.
Copyright(c) 2016 Michael Walker
LicenseMIT
MaintainerMichael Walker <mike@barrucadu.co.uk>
Stabilitystable
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Concurrent.Classy.STM.TQueue

Contents

Description

A TQueue is like a TChan, with two important differences:

  • it has faster throughput than both TChan and Chan (although the costs are amortised, so the cost of individual operations can vary a lot).
  • it does not provide equivalents of the dupTChan and cloneTChan operations.

The implementation is based on the traditional purely-functional queue representation that uses two lists to obtain amortised O(1) enqueue and dequeue operations.

Deviations: TQueue as defined here does not have an Eq instance, this is because the MonadSTM TVar type does not have an Eq constraint. Furthermore, the newTQueueIO function is not provided.

Synopsis

TQueue

data TQueue stm a Source #

TQueue is an abstract type representing an unbounded FIFO channel.

Since: 1.0.0.0

newTQueue :: MonadSTM stm => stm (TQueue stm a) Source #

Build and returns a new instance of TQueue

Since: 1.0.0.0

readTQueue :: MonadSTM stm => TQueue stm a -> stm a Source #

Read the next value from the TQueue.

Since: 1.0.0.0

tryReadTQueue :: MonadSTM stm => TQueue stm a -> stm (Maybe a) Source #

A version of readTQueue which does not retry. Instead it returns Nothing if no value is available.

Since: 1.0.0.0

flushTQueue :: MonadSTM stm => TQueue stm a -> stm [a] Source #

Efficiently read the entire contents of a TQueue into a list. This function never retries.

Since: 1.6.1.0

peekTQueue :: MonadSTM stm => TQueue stm a -> stm a Source #

Get the next value from the TQueue without removing it, retrying if the channel is empty.

Since: 1.0.0.0

tryPeekTQueue :: MonadSTM stm => TQueue stm a -> stm (Maybe a) Source #

A version of peekTQueue which does not retry. Instead it returns Nothing if no value is available.

Since: 1.0.0.0

writeTQueue :: MonadSTM stm => TQueue stm a -> a -> stm () Source #

Write a value to a TQueue.

Since: 1.0.0.0

unGetTQueue :: MonadSTM stm => TQueue stm a -> a -> stm () Source #

Put a data item back onto a channel, where it will be the next item read.

Since: 1.0.0.0

isEmptyTQueue :: MonadSTM stm => TQueue stm a -> stm Bool Source #

Returns True if the supplied TQueue is empty.

Since: 1.0.0.0