-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Simple implementation of a priority queue.
--
-- Simple implementation of a priority queue.
@package priority-queue
@version 0.2
module Data.PriorityQueue
class (Monad m) => Enqueue q m :: (* -> *) a | q -> a
enqueue :: (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
-- | The pure type at the chewy center.
data PQ a
-- | A new empty PQ
emptyPQ :: (Ord p) => (a -> p) -> PQ a
-- | Build a priority queue from a modifiable reference containing a
-- PQ
mkPriorityQueue :: (ModifyRef sr m (PQ a)) => sr -> PriorityQueue m a
-- | Build a priority queue using an instance of the default modifiable
-- reference for the requested monad and value type
mkDefaultPriorityQueue :: Ref m (PQ a) -> PriorityQueue m a
-- | A priority queue usable in the monad m with values of type
-- a
data PriorityQueue m a
-- | Construct a new priority queue using the specified indexing function
newPriorityQueue :: (Monad m, HasRef m1, NewRef (Ref m1 (PQ a)) m (PQ a), Ord p) => (a -> p) -> m (PriorityQueue m1 a)
-- | Construct a new priority queue using a comparator function. It is the
-- user's responsibility to ensure that this function provides a sensible
-- order.
newPriorityQueueBy :: (Monad m, HasRef m1, NewRef (Ref m1 (PQ a)) m (PQ a)) => (a -> a -> Ordering) -> m (PriorityQueue m1 a)
instance (Monad m) => QueueSize (PriorityQueue m a) m
instance (Monad m) => PeekQueue (PriorityQueue m a) m a
instance (Monad m) => DequeueWhere (PriorityQueue m a) m a
instance (Monad m) => Dequeue (PriorityQueue m a) m a
instance (Monad m) => Enqueue (PriorityQueue m a) m a