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