This seems to be a compiler bug, but let me know if I've missed something. The behavior I see is that Make_ok1 and Make_ok2 compile fine, but the very similar functor Make_bad does not. I get this compile error: ======================================== Error: Signature mismatch: Modules do not match: sig module C : sig module T : sig end type t = Make(T).t end module T = C.T type t = Make(T).t end is not included in sig type t module C : sig type t = t end end In module C: Modules do not match: sig module T : sig end type t = Make(T).t end is not included in sig type t = C.t end In module C: Type declarations do not match: type t = Make(T).t is not included in type t = t ======================================== And here is the code: ======================================== module type S = sig type t end module Make (M : sig end) : S = struct type t end module Make_ok1 (M : sig end) : sig type t module A : S with type t = t end = struct module A = struct include Make (struct end) end include A end module Make_ok2 (M : sig end) : sig type t module B : S with type t = t end = struct module T = struct end module B = struct include Make (T) end include B end module Make_bad (M : sig end) : sig type t module C : S with type t = t end = struct module C = struct module T = struct end include Make (T) end include C end ======================================== -- Carl Eastlund