-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Reusable corecursive queues, via continuations. -- -- Corecursive Queues @package control-monad-queue @version 0.0.9.1 module Control.Monad.Queue.Util type LenType = Word module Control.Monad.Queue.Class class (Monad q) => MonadQueue e q | q -> e enQ :: (MonadQueue e q) => e -> q () deQ :: (MonadQueue e q) => q (Maybe e) deQs :: (MonadQueue e q, Integral maxlen) => maxlen -> q [e] peekQ :: (MonadQueue e q) => q (Maybe e) peekQs :: (MonadQueue e q, Integral maxlen) => maxlen -> q [e] peekQn :: (MonadQueue e q, Integral index) => index -> q (Maybe e) lenQ :: (MonadQueue e q, Integral len) => q len -- | A library implementation of corecursive queues, see Circular -- Programs and Self-Referential Structures by Lloyd Allison, -- Software Practice and Experience, 19(2), pp.99-109, Feb 1989 -- -- http://www.csse.monash.edu.au/~lloyd/tildeFP/1989SPE/ -- -- For an explanation of the library implementation, see Lloyd -- Allison's Corecursive Queues: Why Continuations Matter by Leon P -- Smith, in The Monad Reader issue 14. This library corresponds -- to CorecQ in that paper. module Control.Monad.Queue.Allison data Q e a type LenType = Word -- | Returns a list of all elements enqueued during the queue computation runQueue :: Q e a -> [e] -- | Enqueues an element to the queue enQ :: e -> Q e () -- | Dequeues an element, returns Nothing if the queue is empty. deQ :: Q e (Maybe e) -- | Dequeues up to len elements from the queue deQs :: (Integral len) => len -> Q e [e] -- | Dequeues an element: terminates the queue computation if the queue is -- empty. deQ_break :: Q e e -- | Examines the front element of the queue without removing it. peekQ :: Q e (Maybe e) -- | Examines the element currently at position index in the -- queue, indexing starts with 0, like !!. peekQn :: (Integral index) => index -> Q e (Maybe e) -- | Examines up to maxlen elements of the queue without removing -- them. peekQs :: (Integral maxlen) => maxlen -> Q e [e] -- | Returns the length of the queue lenQ :: (Integral len) => Q e len -- | Returns the length of the queue lenQ_ :: Q e LenType callCC :: ((a -> forall b. Q e b) -> Q e a) -> Q e a instance MonadQueue e (Q e) instance Monad (Q e) -- | Corecursive queues with return values. This is a straightforward -- generalization of Control.Monad.Queue.Allison. It corresponds to -- CorecQW in the paper Lloyd Allison's Corecursive Queues: -- Why Continuations Matter by Leon P Smith in the Monad Reader issue -- 14. module Control.Monad.Queue.Corec data Q w e a type LenType = Word -- | Runs the computation, returns the result of the computation and a list -- of all elements enqueued runResultQueue :: Q a e a -> (a, [e]) -- | Runs the computation, returns the result of the computation runResult :: Q a e a -> a -- | Runs the computation, returns a list of all elements enqueued runQueue :: Q a e a -> [e] -- | Enqueues an element to the queue enQ :: e -> Q w e () -- | Dequeues and element: returns Nothing if the queue is empty. deQ :: Q w e (Maybe e) -- | Dequeues an element: terminates the computation with the final result -- w if the queue is empty. deQ_break :: w -> Q w e e -- | Dequeues up to len elements from the queue deQs :: (Integral len) => len -> Q w e [e] -- | Examines the front element of the queue without removing it. peekQ :: Q w e (Maybe e) -- | Examines the element currently at position index in the -- queue, indexing starts from 0, like !! peekQn :: (Integral index) => index -> Q w e (Maybe e) -- | Looks at up to the first len elements of the queue, like -- deQs except without removing them. peekQs :: (Integral len) => len -> Q w e [e] -- | Returns the length of the queue lenQ :: (Integral len) => Q w e len -- | Returns the length of the queue lenQ_ :: Q w e LenType -- | Applies a function to the final return value of the entire -- computation, like Control.Monad.Cont.mapCont mapQW :: (w -> w) -> Q w e a -> Q w e a callCC :: ((a -> forall b. Q w e b) -> Q w e a) -> Q w e a instance MonadQueue e (Q w e) instance Monad (Q w e)