Hi, Sorry if the following is already a known issue. The following program trying to define a type and a class mutually recursive is rejected by ocamlc (3.11+dev12 Private_abbrevs+natdynlink (2008-02-29)): module rec M : sig type t = Foo of N.c end = struct type t = Foo of N.c end and N : sig class c : object method x : M.t end end = struct class c = object (self) method x = M.Foo (self :> c) end end The error message is puzzling: Error: Signature mismatch: Modules do not match: sig class c : object method x : M.t end end is not included in sig class c : object method x : M.t end end Type declarations do not match: type c = N.c is not included in type c = < x : M.t > These signatures are literaly same, but do not match. The above code is accepted by the compiler if I write method x = M.Foo (self :> N.c) to coerce the object to the outer class N.c instead of c. Is it a bug of typing? Or is it ok but with a puzzling error message ? -- Jun FURUSE