sig
  type 'a lazy_list = Nil | Cons of 'a * 'Enumerator.lazy_list lazy_t
  type 'a t = (unit -> 'Enumerator.lazy_list) * ('-> string)
  val iter_list : ('-> unit) -> 'Enumerator.lazy_list -> unit
  val iter : ('-> unit) -> 'Enumerator.t -> unit
  val empty : '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 : 'Enumerator.t -> int -> 'a array Enumerator.t
  val list : 'Enumerator.t -> int -> 'a list Enumerator.t
  val option : 'Enumerator.t -> 'a option Enumerator.t
  val ref : 'Enumerator.t -> 'Pervasives.ref Enumerator.t
  val buffer : char Enumerator.t -> int -> Buffer.t Enumerator.t
  val queue : 'Enumerator.t -> int -> 'Queue.t Enumerator.t
  val stack : 'Enumerator.t -> int -> 'Stack.t Enumerator.t
  val weak : 'a option Enumerator.t -> int -> '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 -> ('-> string) -> 'Enumerator.t
  val lift : '-> string -> 'Enumerator.t
  val lift_list : 'a list -> ('-> string) -> 'Enumerator.t
  val lift_array : 'a array -> ('-> string) -> 'Enumerator.t
  val lift_string : string -> char Enumerator.t
  val filter : ('-> bool) -> 'Enumerator.t -> 'Enumerator.t
  val transform : ('-> 'a) -> 'Enumerator.t -> 'Enumerator.t
  val sequence : 'Enumerator.t list -> 'Enumerator.t
  val for_each : int -> int -> (int -> 'Enumerator.t) -> 'Enumerator.t
  val map1 :
    ('-> 'b) -> ('-> string) -> 'Enumerator.t -> 'Enumerator.t
  val map2 :
    ('-> '-> 'c) ->
    ('-> string) -> 'Enumerator.t * 'Enumerator.t -> 'Enumerator.t
  val map3 :
    ('-> '-> '-> 'd) ->
    ('-> string) ->
    'Enumerator.t * 'Enumerator.t * 'Enumerator.t -> 'Enumerator.t
  val map4 :
    ('-> '-> '-> '-> 'e) ->
    ('-> string) ->
    'Enumerator.t * 'Enumerator.t * 'Enumerator.t * 'Enumerator.t ->
    'Enumerator.t
  val map5 :
    ('-> '-> '-> '-> '-> 'f) ->
    ('-> string) ->
    'Enumerator.t * 'Enumerator.t * 'Enumerator.t * 'Enumerator.t *
    'Enumerator.t -> 'Enumerator.t
  val zip1 : 'Enumerator.t -> 'Enumerator.t
  val zip2 : 'Enumerator.t -> 'Enumerator.t -> ('a * 'b) Enumerator.t
  val zip3 :
    'Enumerator.t ->
    'Enumerator.t -> 'Enumerator.t -> ('a * 'b * 'c) Enumerator.t
  val zip4 :
    'Enumerator.t ->
    'Enumerator.t ->
    'Enumerator.t -> 'Enumerator.t -> ('a * 'b * 'c * 'd) Enumerator.t
  val zip5 :
    'Enumerator.t ->
    'Enumerator.t ->
    'Enumerator.t ->
    'Enumerator.t ->
    'Enumerator.t -> ('a * 'b * 'c * 'd * 'e) Enumerator.t
  val create_int_functions :
    ?inf_eq:('-> '-> bool) ->
    ('-> 'a) -> ('-> string) -> '-> '-> 'Enumerator.t
  module State :
    sig
      type 'a state = {
        init : 'Enumerator.t array;
        curr : 'Enumerator.lazy_list array;
      }
      val get : 'Enumerator.State.state -> int -> 'a
    end
  val create_state_based :
    (unit -> 'Enumerator.t array) ->
    ('Enumerator.State.state -> 'b) ->
    '-> (unit -> 'Enumerator.lazy_list) * 'c
end