Control.Concurrent.STM.TQueue

stm-2.4.4.1: Software Transactional Memory

Copyright | (c) The University of Glasgow 2012
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | non-portable (requires STM)
Safe Haskell | Trustworthy
Language | Haskell2010

Control.Concurrent.STM.TQueue

Contents

- TQueue

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.

Since: 2.4

Synopsis

- data TQueue a
- newTQueue :: STM (TQueue a)
- newTQueueIO :: IO (TQueue a)
- readTQueue :: TQueue a -> STM a
- tryReadTQueue :: TQueue a -> STM (Maybe a)
- peekTQueue :: TQueue a -> STM a
- tryPeekTQueue :: TQueue a -> STM (Maybe a)
- writeTQueue :: TQueue a -> a -> STM ()
- unGetTQueue :: TQueue a -> a -> STM ()
- isEmptyTQueue :: TQueue a -> STM Bool

# TQueue

data TQueue a #

`TQueue` is an abstract type representing an unbounded FIFO channel.

Since: 2.4

Instances

Eq (TQueue a) # |
Methods (==) :: TQueue a -> TQueue a -> Bool # (/=) :: TQueue a -> TQueue a -> Bool #

newTQueue :: STM (TQueue a) #

Build and returns a new instance of `TQueue`

newTQueueIO :: IO (TQueue a) #

`IO` version of `newTQueue`. This is useful for creating top-level `TQueue`s using `unsafePerformIO`, because using `atomically` inside `unsafePerformIO` isn't possible.

readTQueue :: TQueue a -> STM a #

Read the next value from the `TQueue`.

tryReadTQueue :: TQueue a -> STM (Maybe a) #

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

peekTQueue :: TQueue a -> STM a #

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

tryPeekTQueue :: TQueue a -> STM (Maybe a) #

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

writeTQueue :: TQueue a -> a -> STM () #

Write a value to a `TQueue`.

unGetTQueue :: TQueue a -> a -> STM () #

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

isEmptyTQueue :: TQueue a -> STM Bool #

Returns `True` if the supplied `TQueue` is empty.