module Empty : sig end type u = A type v = B module type S = sig end val m : (module S) = module M : sig type 'a t = X of 'a end val x : (u * v * (module S)) M.t = M.X (A, B, ) module type S = sig end val m : (module S) = type u = A type v = B module M : sig type 'a t = X of 'a end val y : (u * v * (module S)) M.t = M.X (A, B, ) Line 2, characters 4-5: 2 | x = y;; ^ Error: This expression has type "(u * v * (module S)) M.t" but an expression was expected of type "(u/2 * v/2 * (module S/2)) M/2.t" Hint: The types "v" and "u" have been defined multiple times in this toplevel session. Some toplevel values still refer to old versions of those types. Did you try to redefine them? Hint: The module "M" has been defined multiple times in this toplevel session. Some toplevel values still refer to old versions of this module. Did you try to redefine them? Hint: The module type "S" has been defined multiple times in this toplevel session. Some toplevel values still refer to old versions of this module type. Did you try to redefine them? type a = A val a : a = A type a = A val b : a = A type a = A val c : a = A Line 2, characters 4-5: 2 | a = b;; ^ Error: This expression has type "a/2" but an expression was expected of type "a/3" Hint: The type "a" has been defined multiple times in this toplevel session. Some toplevel values still refer to old versions of this type. Did you try to redefine them? Line 1, characters 4-5: 1 | a = c;; ^ Error: This expression has type "a" but an expression was expected of type "a/3" Hint: The type "a" has been defined multiple times in this toplevel session. Some toplevel values still refer to old versions of this type. Did you try to redefine them? Line 1, characters 4-5: 1 | b = c;; ^ Error: This expression has type "a" but an expression was expected of type "a/2" Hint: The type "a" has been defined multiple times in this toplevel session. Some toplevel values still refer to old versions of this type. Did you try to redefine them?