Data.Concurrent.Deque.Reference

abstract-deque-0.3: Abstract, parameterized interface to mutable Deques.

Safe Haskell | Safe
Language | Haskell98

Data.Concurrent.Deque.Reference

Description

A strawman implementation of concurrent Dequeues. This implementation is so simple that it also makes a good reference implementation for debugging.

The queue representation is simply an IORef containing a Data.Sequence.

Also see Data.Concurrent.Deque.Reference.DequeInstance. By convention a module of this name is also provided.

Synopsis

- data SimpleDeque elt = DQ !Int !(IORef (Seq elt))
- newQ :: IO (SimpleDeque elt)
- nullQ :: SimpleDeque elt -> IO Bool
- newBoundedQ :: Int -> IO (SimpleDeque elt)
- pushL :: SimpleDeque t -> t -> IO ()
- pushR :: SimpleDeque t -> t -> IO ()
- tryPopR :: SimpleDeque a -> IO (Maybe a)
- tryPopL :: SimpleDeque a -> IO (Maybe a)
- tryPushL :: SimpleDeque a -> a -> IO Bool
- tryPushR :: SimpleDeque a -> a -> IO Bool
- _is_using_CAS :: Bool

# Documentation

data SimpleDeque elt #

Stores a size bound (if any) as well as a mutable Seq.

Constructors

DQ !Int !(IORef (Seq elt)) |

Instances

BoundedR SimpleDeque # |
Methods tryPushR :: SimpleDeque elt -> elt -> IO Bool #
BoundedL SimpleDeque # |
Methods newBoundedQ :: Int -> IO (SimpleDeque elt) # tryPushL :: SimpleDeque elt -> elt -> IO Bool #
PushR SimpleDeque # |
Methods pushR :: SimpleDeque elt -> elt -> IO () #
PopL SimpleDeque # |
Methods tryPopL :: SimpleDeque elt -> IO (Maybe elt) #
DequeClass SimpleDeque # |
Methods newQ :: IO (SimpleDeque elt) # nullQ :: SimpleDeque elt -> IO Bool # pushL :: SimpleDeque elt -> elt -> IO () # tryPopR :: SimpleDeque elt -> IO (Maybe elt) # leftThreadSafe :: SimpleDeque elt -> Bool # rightThreadSafe :: SimpleDeque elt -> Bool #

newQ :: IO (SimpleDeque elt) #

nullQ :: SimpleDeque elt -> IO Bool #

newBoundedQ :: Int -> IO (SimpleDeque elt) #

pushL :: SimpleDeque t -> t -> IO () #

pushR :: SimpleDeque t -> t -> IO () #

tryPopR :: SimpleDeque a -> IO (Maybe a) #

tryPopL :: SimpleDeque a -> IO (Maybe a) #

tryPushL :: SimpleDeque a -> a -> IO Bool #

tryPushR :: SimpleDeque a -> a -> IO Bool #

_is_using_CAS :: Bool #