-- 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.2 module Data.PriorityQueue 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 -- | 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