sig
  type 'a lazy_list =
    'a Enumerator.lazy_list =
      Nil
    | Cons of 'a * 'a Abbreviations.Enum.lazy_list lazy_t
  type 'a t = 'a Enumerator.t
  val iter_list : ('a -> unit) -> 'a Enumerator.lazy_list -> unit
  val iter : ('a -> unit) -> 'a Enumerator.t -> unit
  val empty : 'a Enumerator.t
  val unit : unit Enumerator.t
  val bool : bool Enumerator.t
  val int : int -> int -> int Enumerator.t
  val int32 : int32 -> int32 -> int32 Enumerator.t
  val int64 : int64 -> int64 -> int64 Enumerator.t
  val nativeint : nativeint -> nativeint -> nativeint Enumerator.t
  val make_char : char -> char -> char Enumerator.t
  val char : char Enumerator.t
  val string : char Enumerator.t -> int -> string Enumerator.t
  val float : float -> float -> int -> float Enumerator.t
  val complex :
    float Enumerator.t -> float Enumerator.t -> Complex.t Enumerator.t
  val array : 'a Enumerator.t -> int -> 'a array Enumerator.t
  val list : 'a Enumerator.t -> int -> 'a list Enumerator.t
  val option : 'a Enumerator.t -> 'a option Enumerator.t
  val ref : 'a Enumerator.t -> 'a ref Enumerator.t
  val buffer : char Enumerator.t -> int -> Buffer.t Enumerator.t
  val queue : 'a Enumerator.t -> int -> 'a Queue.t Enumerator.t
  val stack : 'a Enumerator.t -> int -> 'a Stack.t Enumerator.t
  val weak : 'a option Enumerator.t -> int -> 'a Weak.t Enumerator.t
  val file_chars : string -> char Enumerator.t
  val file_bytes : string -> int Enumerator.t
  val file_lines : string -> string Enumerator.t
  val file_values : string -> ('a -> string) -> 'a Enumerator.t
  val lift : 'a -> string -> 'a Enumerator.t
  val lift_list : 'a list -> ('a -> string) -> 'a Enumerator.t
  val lift_array : 'a array -> ('a -> string) -> 'a Enumerator.t
  val lift_string : string -> char Enumerator.t
  val filter : ('a -> bool) -> 'a Enumerator.t -> 'a Enumerator.t
  val transform : ('a -> 'a) -> 'a Enumerator.t -> 'a Enumerator.t
  val sequence : 'a Enumerator.t list -> 'a Enumerator.t
  val for_each : int -> int -> (int -> 'a Enumerator.t) -> 'a Enumerator.t
  val map1 :
    ('a -> 'b) -> ('b -> string) -> 'a Enumerator.t -> 'b Enumerator.t
  val map2 :
    ('a -> 'b -> 'c) ->
    ('c -> string) -> 'a Enumerator.t * 'b Enumerator.t -> 'c Enumerator.t
  val map3 :
    ('a -> 'b -> 'c -> 'd) ->
    ('d -> string) ->
    'a Enumerator.t * 'b Enumerator.t * 'c Enumerator.t -> 'd Enumerator.t
  val map4 :
    ('a -> 'b -> 'c -> 'd -> 'e) ->
    ('e -> string) ->
    'a Enumerator.t * 'b Enumerator.t * 'c Enumerator.t * 'd Enumerator.t ->
    'e Enumerator.t
  val map5 :
    ('a -> 'b -> 'c -> 'd -> 'e -> 'f) ->
    ('f -> string) ->
    'a Enumerator.t * 'b Enumerator.t * 'c Enumerator.t * 'd Enumerator.t *
    'e Enumerator.t -> 'f Enumerator.t
  val zip1 : 'a Enumerator.t -> 'a Enumerator.t
  val zip2 : 'a Enumerator.t -> 'b Enumerator.t -> ('a * 'b) Enumerator.t
  val zip3 :
    'a Enumerator.t ->
    'b Enumerator.t -> 'c Enumerator.t -> ('a * 'b * 'c) Enumerator.t
  val zip4 :
    'a Enumerator.t ->
    'b Enumerator.t ->
    'c Enumerator.t -> 'd Enumerator.t -> ('a * 'b * 'c * 'd) Enumerator.t
  val zip5 :
    'a Enumerator.t ->
    'b Enumerator.t ->
    'c Enumerator.t ->
    'd Enumerator.t ->
    'e Enumerator.t -> ('a * 'b * 'c * 'd * 'e) Enumerator.t
  val create_int_functions :
    ?inf_eq:('a -> 'a -> bool) ->
    ('a -> 'a) -> ('a -> string) -> 'a -> 'a -> 'a Enumerator.t
  module State :
    sig
      type 'a state = {
        init : 'a Enumerator.t array;
        curr : 'a Enumerator.lazy_list array;
      }
      val get : 'a state -> int -> 'a
    end
  val create_state_based :
    (unit -> 'a Enumerator.t array) ->
    ('a State.state -> 'b) -> 'c -> (unit -> 'b Enumerator.lazy_list) * 'c
end