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