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 -> TypeAn (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 bAlternative (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 dpair : 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 bisized : ((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 -> Typememorate : ((x : Fix d) -> Memorator d b (b x)) -> Nat -> (x : Fix d) -> List (b x)