sig
  type 'a t
  val iter : ('a -> unit) -> 'a Enum.t -> unit
  val iter2 : ('a -> 'b -> unit) -> 'a Enum.t -> 'b Enum.t -> unit
  val fold : ('a -> 'b -> 'b) -> 'b -> 'a Enum.t -> 'b
  val fold2 : ('a -> 'b -> 'c -> 'c) -> 'c -> 'a Enum.t -> 'b Enum.t -> 'c
  val iteri : (int -> 'a -> unit) -> 'a Enum.t -> unit
  val iter2i : (int -> 'a -> 'b -> unit) -> 'a Enum.t -> 'b Enum.t -> unit
  val foldi : (int -> 'a -> 'b -> 'b) -> 'b -> 'a Enum.t -> 'b
  val fold2i :
    (int -> 'a -> 'b -> 'c -> 'c) -> 'c -> 'a Enum.t -> 'b Enum.t -> 'c
  val find : ('a -> bool) -> 'a Enum.t -> 'a
  val is_empty : 'a Enum.t -> bool
  val peek : 'a Enum.t -> 'a option
  val get : 'a Enum.t -> 'a option
  val next : 'a Enum.t -> 'a
  val push : 'a Enum.t -> 'a -> unit
  val junk : 'a Enum.t -> unit
  val clone : 'a Enum.t -> 'a Enum.t
  val force : 'a Enum.t -> unit
  val map : ('a -> 'b) -> 'a Enum.t -> 'b Enum.t
  val mapi : (int -> 'a -> 'b) -> 'a Enum.t -> 'b Enum.t
  val filter : ('a -> bool) -> 'a Enum.t -> 'a Enum.t
  val filter_map : ('a -> 'b option) -> 'a Enum.t -> 'b Enum.t
  val append : 'a Enum.t -> 'a Enum.t -> 'a Enum.t
  val concat : 'a Enum.t Enum.t -> 'a Enum.t
  exception No_more_elements
  val empty : unit -> 'a Enum.t
  val make :
    next:(unit -> 'a) ->
    count:(unit -> int) -> clone:(unit -> 'a Enum.t) -> 'a Enum.t
  val from : (unit -> 'a) -> 'a Enum.t
  val init : int -> (int -> 'a) -> 'a Enum.t
  val count : 'a Enum.t -> int
  val fast_count : 'a Enum.t -> bool
end