functor
  (E : sig
         type a
         val from_enum : Deriving_Enum.Defaults'.a -> int
         val to_enum : int -> Deriving_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