sig
  type +'a t
  val empty : unit -> 'a Enum.t
  val of_list : 'a list -> 'a Enum.t
  val collapse : 'a Enum.t Call.t -> 'a Enum.t
  val iter : ('a -> unit) -> 'a Enum.t -> unit Call.t
  val iter_s : ('a -> unit Call.t) -> 'a Enum.t -> unit Call.t
  val iter_p : ('a -> unit Call.t) -> 'a Enum.t -> unit Call.t
  val map : ('a -> 'b) -> 'a Enum.t -> 'b Enum.t
  val map_s : ('a -> 'b Call.t) -> 'a Enum.t -> 'b Enum.t
  val map_p : ('a -> 'b Call.t) -> 'a Enum.t -> 'b Enum.t
  val fold : ('a -> 'b -> 'a) -> 'a -> 'b Enum.t -> 'a Call.t
  val append : 'a Enum.t -> 'a Enum.t -> 'a Enum.t
  val concat : 'a Enum.t Enum.t -> 'a Enum.t
  val filter : ('a -> bool) -> 'a Enum.t -> 'a Enum.t
  val filter_s : ('a -> bool Call.t) -> 'a Enum.t -> 'a Enum.t
  val filter_map : ('a -> 'b option) -> 'a Enum.t -> 'b Enum.t
  val find : ('a -> bool) -> 'a Enum.t -> 'a option Call.t
end