The content of this module is based on the paper A Completely Unique Account of Enumeration by Cas van der Rest, and Wouter Swierstra https://doi.org/10.1145/3547636
record IEnumerator : (i -> Type) -> Type -> Type
An (a,b)-enumerator is an enumerator for values of type b provided
that we already know how to enumerate subterms of type a
MkIEnumerator : (((v : i) -> List (a v)) -> List b) -> IEnumerator a b
.runIEnumerator : IEnumerator a b -> ((v : i) -> List (a v)) -> List b
Alternative (IEnumerator a)
Applicative (IEnumerator a)
Functor (IEnumerator a)
Monad (IEnumerator a)
rec : (v : i) -> IEnumerator a (a v)
pairWith : (b -> c -> d) -> IEnumerator a b -> IEnumerator a c -> IEnumerator a d
pair : IEnumerator a b -> IEnumerator a c -> IEnumerator a (b, c)
sig : {b : a -> Type} -> IEnumerator f a -> ((x : a) -> IEnumerator f (b x)) -> IEnumerator f (x : a ** b x)
const : List b -> IEnumerator a b
isized : ((v : i) -> IEnumerator a (a v)) -> Nat -> (v : i) -> List (a v)
indexed : (d : (i -> IDesc List i)) -> (v : i) -> IEnumerator (Fix d) (Fix d v)
0 Memorator : (d : Desc p) -> (Fix d -> Type) -> Type -> Type
memorate : ((x : Fix d) -> Memorator d b (b x)) -> Nat -> (x : Fix d) -> List (b x)