`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`