On Fri, Oct 28, 2016 at 12:17 PM, Nicolas Ojeda Bar < nicolas.ojeda.bar@lexifi.com> wrote: > I did not try it, but I think you want > > module Mul_default : MUL = functor (E : EQ) (N : NUM with type t = E.t) > -> struct > include E > include (N : NUM with type t := E.t) > > let mul (x : t) (y : t) : t = failwith "foo" > end > ​​Phew! module type EQ = sig type t val eq : t * t -> bool end module type NUM = sig type t val from_int : int -> t val ( + ) : t -> t -> t end module type MUL_basic = sig type t val mul : t -> t -> t end module type MUL = functor (E : EQ) (N : NUM with type t = E.t) -> MUL_basic module Mul_default : MUL = functor (E : EQ) (N : NUM with type t = E.t) -> struct include E include (N : NUM with type t := E.t) let mul (x : t) (y : t) : t = failwith "foo" end ​Thanks Nicolas. Lot to learn here! -- Shayne Fletcher