sig
  module type Enum =
    sig
      type a
      val succ : Deriving_Enum.Enum.a -> Deriving_Enum.Enum.a
      val pred : Deriving_Enum.Enum.a -> Deriving_Enum.Enum.a
      val to_enum : int -> Deriving_Enum.Enum.a
      val from_enum : Deriving_Enum.Enum.a -> int
      val enum_from : Deriving_Enum.Enum.a -> Deriving_Enum.Enum.a list
      val enum_from_then :
        Deriving_Enum.Enum.a ->
        Deriving_Enum.Enum.a -> Deriving_Enum.Enum.a list
      val enum_from_to :
        Deriving_Enum.Enum.a ->
        Deriving_Enum.Enum.a -> Deriving_Enum.Enum.a list
      val enum_from_then_to :
        Deriving_Enum.Enum.a ->
        Deriving_Enum.Enum.a ->
        Deriving_Enum.Enum.a -> Deriving_Enum.Enum.a list
    end
  module Defaults :
    functor
      (E : sig
             type a
             val numbering : (Deriving_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 : Deriving_Enum.Defaults'.a -> int
             val to_enum : int -> Deriving_Enum.Defaults'.a
           end) (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