-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Abstraction typeclasses for queue-like things.
--
-- A collection of abstract interfaces to mutable queue-like things. Note
-- that I named this module before I realized that there was a module of
-- the same name in (base<3). I am open to suggestions for a new name.
@package queue
@version 0.1.2
module Data.Queue.Classes
-- | Construct a new FIFO queue.
class Monad m => NewFifo q m
newFifo :: NewFifo q m => m q
-- | A type class carrying an altered set of functional dependencies used
-- to constrain queues when the type of the queue never escapes far
-- enough for a more deliberate choice to be made.
class Monad m => DefaultFifo q m a | q -> a, m a -> q
class Monad m => Enqueue q m a | q -> a
enqueue :: Enqueue q m a => q -> a -> m ()
enqueueBatch :: Enqueue q m a => q -> [a] -> m ()
class Monad m => Dequeue q m a | q -> a
dequeue :: Dequeue q m a => q -> m (Maybe a)
dequeueBatch :: Dequeue q m a => q -> m [a]
class Monad m => DequeueWhere q m a | q -> a
dequeueWhere :: DequeueWhere q m a => q -> (a -> Bool) -> m (Maybe a)
class Monad m => PeekQueue q m a | q -> a
peekQueue :: PeekQueue q m a => q -> m [a]
peekQueueTaking :: PeekQueue q m a => Int -> q -> m [a]
class Monad m => QueueSize q m
queueSize :: QueueSize q m => q -> m Int
module Data.Queue.Instances
-- | Chan is an abstract type representing an unbounded FIFO
-- channel.
data Chan a :: * -> *
-- | An MVar (pronounced "em-var") is a synchronising variable, used
-- for communication between concurrent threads. It can be thought of as
-- a a box, which may be empty or full.
data MVar a :: * -> *
-- | A monad supporting atomic memory transactions.
data STM a :: * -> *
-- | TChan is an abstract type representing an unbounded FIFO
-- channel.
data TChan a :: * -> *
-- | A TMVar is a synchronising variable, used for communication
-- between concurrent threads. It can be thought of as a box, which may
-- be empty or full.
data TMVar a :: * -> *
-- | Perform a series of STM actions atomically.
--
-- You cannot use atomically inside an unsafePerformIO or
-- unsafeInterleaveIO. Any attempt to do so will result in a
-- runtime error. (Reason: allowing this would effectively allow a
-- transaction inside a transaction, depending on exactly when the thunk
-- is evaluated.)
--
-- However, see newTVarIO, which can be called inside
-- unsafePerformIO, and which allows top-level TVars to be
-- allocated.
atomically :: STM a -> IO a
instance Dequeue (MVar a) IO a
instance Enqueue (MVar a) IO a
instance NewFifo (MVar a) IO
instance Enqueue (Chan a) IO a
instance NewFifo (Chan a) IO
module Data.Queue
-- | Construct a new FIFO queue.
class Monad m => NewFifo q m
newFifo :: NewFifo q m => m q
-- | A type class carrying an altered set of functional dependencies used
-- to constrain queues when the type of the queue never escapes far
-- enough for a more deliberate choice to be made.
class Monad m => DefaultFifo q m a | q -> a, m a -> q
class Monad m => Enqueue q m a | q -> a
enqueue :: Enqueue q m a => q -> a -> m ()
enqueueBatch :: Enqueue q m a => q -> [a] -> m ()
class Monad m => Dequeue q m a | q -> a
dequeue :: Dequeue q m a => q -> m (Maybe a)
dequeueBatch :: Dequeue q m a => q -> m [a]
class Monad m => DequeueWhere q m a | q -> a
dequeueWhere :: DequeueWhere q m a => q -> (a -> Bool) -> m (Maybe a)
class Monad m => PeekQueue q m a | q -> a
peekQueue :: PeekQueue q m a => q -> m [a]
peekQueueTaking :: PeekQueue q m a => Int -> q -> m [a]
class Monad m => QueueSize q m
queueSize :: QueueSize q m => q -> m Int
-- | RQueue : read-only newtype wrapper for arbitrary queues
data RQueue q
mkRQueue :: q -> RQueue q
-- | WQueue : write-only newtype wrapper for arbitrary queues
data WQueue q
mkWQueue :: q -> WQueue q
instance Enqueue q m a => Enqueue (WQueue q) m a
instance Dequeue q m a => Dequeue (RQueue q) m a