sig
  type 'a enum
  type 'a t = 'ExEnum.enum
  val from_list : ?name:string -> 'a list -> 'ExEnum.t
  val single : ?name:string -> '-> 'ExEnum.t
  val cardinal : 'ExEnum.t -> Big_int.big_int option
  val get : 'ExEnum.t -> Big_int.big_int -> 'a
  val e_unit : unit ExEnum.t
  val e_bool : bool ExEnum.t
  val e_char : char ExEnum.t
  val e_pchar : char ExEnum.t
  val e_biginterval :
    Big_int.big_int -> Big_int.big_int -> Big_int.big_int ExEnum.t
  val e_interval : int -> int -> int ExEnum.t
  val sub : max:Big_int.big_int -> 'ExEnum.t -> 'ExEnum.t
  val e_bigpos : Big_int.big_int ExEnum.t
  val e_bignat : Big_int.big_int ExEnum.t
  val e_bigint : Big_int.big_int ExEnum.t
  val e_nat : int ExEnum.t
  val e_pos : int ExEnum.t
  val e_int : int ExEnum.t
  val e_string : string ExEnum.t
  val e_rstring : char list -> string ExEnum.t
  val union : 'ExEnum.t list -> 'ExEnum.t
  val product : 'ExEnum.t list -> 'a list ExEnum.t
  val pair : 'ExEnum.t -> 'ExEnum.t -> ('a * 'b) ExEnum.t
  val triple :
    'ExEnum.t -> 'ExEnum.t -> 'ExEnum.t -> ('a * 'b * 'c) ExEnum.t
  val tuple2 : 'ExEnum.t -> 'ExEnum.t -> ('a * 'b) ExEnum.t
  val tuple3 :
    'ExEnum.t -> 'ExEnum.t -> 'ExEnum.t -> ('a * 'b * 'c) ExEnum.t
  val tuple4 :
    'ExEnum.t ->
    'ExEnum.t -> 'ExEnum.t -> 'ExEnum.t -> ('a * 'b * 'c * 'd) ExEnum.t
  val tuple5 :
    'ExEnum.t ->
    'ExEnum.t ->
    'ExEnum.t ->
    'ExEnum.t -> 'ExEnum.t -> ('a * 'b * 'c * 'd * 'e) ExEnum.t
  val tuple6 :
    'ExEnum.t ->
    'ExEnum.t ->
    'ExEnum.t ->
    'ExEnum.t ->
    'ExEnum.t -> 'ExEnum.t -> ('a * 'b * 'c * 'd * 'e * 'f) ExEnum.t
  val e_list : 'ExEnum.t -> 'a list ExEnum.t
  val e_array : 'ExEnum.t -> 'a array ExEnum.t
  val e_option : 'ExEnum.t -> 'a option ExEnum.t
  val pay : 'ExEnum.t Lazy.t -> 'ExEnum.t
  val map : 'ExEnum.t -> ('-> 'b) -> 'ExEnum.t
  val show : 'ExEnum.t -> ('-> string) -> int -> int -> unit
  val bigshow :
    'ExEnum.t -> ('-> string) -> Big_int.big_int -> int -> unit
  val tester :
    'ExEnum.t ->
    ?from:Big_int.big_int ->
    ?upto:Big_int.big_int ->
    ?verbose_period:int -> len:int -> ('-> unit) -> unit
end