On Fri, Oct 28, 2016 at 9:28 AM, Shayne Fletcher <shayne.fletcher.50@gmail.com> wrote:On Fri, Oct 28, 2016 at 9:25 AM, Nicolas Ojeda Bar <nicolas.ojeda.bar@lexifi.com> wrote:You can add a constrain to your functor arguments :module type MUL = functor (E : EQ) (N : NUM with type t = E.t) ->MUL_S with module N := N and module E := EThat does it! I tried so many different things :) You're a rock 'n roll star.Still stuck on how to achieve this I'm afraid.module type EQ = sigtype tval eq : t * t -> boolendmodule type NUM = sigtype tval from_int : int -> tval ( + ) : t -> t -> tendmodule type MUL_S = siginclude EQinclude NUM with type t := tval mul : t -> t -> tendmodule type MUL = functor (E : EQ) (N : NUM with type t = E.t) -> MUL_Smodule Mul_default (E : EQ) (N : NUM with type t = E.t) : MUL = structinclude Einclude (N : NUM with type t := E.t)let mul (x : t) (y : t) : t = failwith "foo"endYields.Error: Signature mismatch:Modules do not match:sigtype t = E.tval eq : t * t -> boolval from_int : int -> E.tval ( + ) : E.t -> E.t -> E.tval mul : t -> t -> tendis not included inMUL--Shayne Fletcher