-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Resuable corecursive queues, via continuations.
--
-- Corecursive Queues
@package control-monad-queue
@version 0.0.9
module Control.Monad.Queue.Util
type LenType = Word32
module Control.Monad.Queue.Class
class (Monad q) => MonadQueue e q | q -> e
enQ :: (MonadQueue e q) => e -> q ()
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)
deQ :: (MonadQueue e q) => q (Maybe e)
deQs :: (MonadQueue e q, Integral maxlen) => maxlen -> q [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 Queue: Why Continuations Matter by Leon P
-- Smith, in The Monad Reader issue 14.
module Control.Monad.Queue.Allison
data Q e a
type LenType = Word32
enQ :: e -> Q e ()
peekQ :: Q e (Maybe e)
peekQn :: (Integral index) => index -> Q e (Maybe e)
peekQs :: (Integral len) => len -> Q e [e]
deQ :: Q e (Maybe e)
deQs :: (Integral len) => len -> Q e [e]
deQ_break :: Q e e
lenQ :: (Integral len) => Q e len
lenQ_ :: Q e LenType
runQueue :: Q e a -> [e]
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.
module Control.Monad.Queue.Corec
data Q w e a
type LenType = Word32
enQ :: e -> Q w e ()
peekQ :: Q w e (Maybe e)
peekQn :: (Integral index) => index -> Q w e (Maybe e)
peekQs :: (Integral len) => len -> Q w e [e]
deQ :: Q w e (Maybe e)
deQ_break :: w -> Q w e e
deQs :: (Integral len) => len -> Q w e [e]
lenQ :: (Integral len) => Q w e len
lenQ_ :: Q w e LenType
runQueue :: Q a e a -> [e]
runResult :: Q a e a -> a
runResultQueue :: Q a e a -> (a, [e])
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)