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: The value y 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: The value b 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: The value c 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: The value c 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?