sig
  module type Enum =
    sig
      type a
      val succ : Enum.Enum.a -> Enum.Enum.a
      val pred : Enum.Enum.a -> Enum.Enum.a
      val to_enum : int -> Enum.Enum.a
      val from_enum : Enum.Enum.a -> int
      val enum_from : Enum.Enum.a -> Enum.Enum.a list
      val enum_from_then : Enum.Enum.a -> Enum.Enum.a -> Enum.Enum.a list
      val enum_from_to : Enum.Enum.a -> Enum.Enum.a -> Enum.Enum.a list
      val enum_from_then_to :
        Enum.Enum.a -> Enum.Enum.a -> Enum.Enum.a -> Enum.Enum.a list
    end
  module Defaults :
    functor
      (E : sig type a val numbering : (Enum.Defaults.a * int) list end->
      sig
        type a = E.a
        val succ : a -> a
        val pred : a -> a
        val to_enum : int -> a
        val from_enum : a -> int
        val enum_from : a -> a list
        val enum_from_then : a -> a -> a list
        val enum_from_to : a -> a -> a list
        val enum_from_then_to : a -> a -> a -> a list
      end
  module Defaults' :
    functor
      (E : sig
             type a
             val from_enum : Enum.Defaults'.a -> int
             val to_enum : int -> Enum.Defaults'.a
           end->
      functor
        (B : sig type a = E.a val min_bound : a val max_bound : a end->
        sig
          type a = B.a
          val succ : a -> a
          val pred : a -> a
          val to_enum : int -> a
          val from_enum : a -> int
          val enum_from : a -> a list
          val enum_from_then : a -> a -> a list
          val enum_from_to : a -> a -> a list
          val enum_from_then_to : a -> a -> a -> a list
        end
  module Enum_bool :
    sig
      type a = bool
      val succ : a -> a
      val pred : a -> a
      val to_enum : int -> a
      val from_enum : a -> int
      val enum_from : a -> a list
      val enum_from_then : a -> a -> a list
      val enum_from_to : a -> a -> a list
      val enum_from_then_to : a -> a -> a -> a list
    end
  module Enum_char :
    sig
      type a = char
      val succ : a -> a
      val pred : a -> a
      val to_enum : int -> a
      val from_enum : a -> int
      val enum_from : a -> a list
      val enum_from_then : a -> a -> a list
      val enum_from_to : a -> a -> a list
      val enum_from_then_to : a -> a -> a -> a list
    end
  module Enum_int :
    sig
      type a = int
      val succ : a -> a
      val pred : a -> a
      val to_enum : int -> a
      val from_enum : a -> int
      val enum_from : a -> a list
      val enum_from_then : a -> a -> a list
      val enum_from_to : a -> a -> a list
      val enum_from_then_to : a -> a -> a -> a list
    end
  module Enum_unit :
    sig
      type a = unit
      val succ : a -> a
      val pred : a -> a
      val to_enum : int -> a
      val from_enum : a -> int
      val enum_from : a -> a list
      val enum_from_then : a -> a -> a list
      val enum_from_to : a -> a -> a list
      val enum_from_then_to : a -> a -> a -> a list
    end
end