The following code compiles correctly: ----- a.ml ----- open Batteries module Ord = struct type t=string let compare=compare end module type S = sig include module type of Map.Make(Ord) (* include module type of Map.Make(Ord).Labels *) end ----- An easy workaround is to name the functor's result: ----- a.ml ----- open Batteries module Ord = struct type t=string let compare=compare end module M = Map.Make(Ord) module type S = sig include module type of M include module type of M.Labels end ----- The above compiles correctly, but is this the best/only solution?