Portability | portable |
---|---|

Stability | experimental |

Maintainer | leon at melding-monads dot com |

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.

- data Q e a
- type LenType = Word
- runQueue :: Q e a -> [e]
- enQ :: e -> Q e ()
- deQ :: Q e (Maybe e)
- deQs :: Integral len => len -> Q e [e]
- deQ_break :: Q e e
- peekQ :: Q e (Maybe e)
- peekQn :: Integral index => index -> Q e (Maybe e)
- peekQs :: Integral maxlen => maxlen -> Q e [e]
- lenQ :: Integral len => Q e len
- lenQ_ :: Q e LenType
- callCC :: ((a -> forall b. Q e b) -> Q e a) -> Q e a

# Documentation

Dequeues an element: terminates the queue computation if the queue is empty.

peekQn :: Integral index => index -> Q e (Maybe e)Source

Examines the element currently at position `index`

in the queue, indexing starts with `0`

, like `!!`

.