module Foobar : sig type t = private int end module F0 : sig type t = private int end Line 2, characters 20-21: 2 | let f (x : F0.t) = (x : Foobar.t);; (* fails *) ^ Error: The value x has type F0.t but an expression was expected of type Foobar.t module F = Foobar val f : F.t -> Foobar.t = module M : sig type t = < m : int > end module M1 : sig type t = private < m : int; .. > end module M2 : sig type t = private < m : int; .. > end Line 1, characters 19-20: 1 | fun (x : M1.t) -> (x : M2.t);; (* fails *) ^ Error: The value x has type M1.t but an expression was expected of type M2.t module M3 : sig type t = private M1.t end - : M3.t -> M1.t = - : M3.t -> M.t = Line 1, characters 44-46: 1 | module M4 : sig type t = private M3.t end = M2;; (* fails *) ^^ Error: Signature mismatch: Modules do not match: sig type t = M2.t end is not included in sig type t = private M3.t end Type declarations do not match: type t = M2.t is not included in type t = private M3.t The type M2.t is not equal to the type M3.t Line 1, characters 44-45: 1 | module M4 : sig type t = private M3.t end = M;; (* fails *) ^ Error: Signature mismatch: Modules do not match: sig type t = < m : int > end is not included in sig type t = private M3.t end Type declarations do not match: type t = < m : int > is not included in type t = private M3.t The type < m : int > is not equal to the type M3.t Line 1, characters 44-46: 1 | module M4 : sig type t = private M3.t end = M1;; (* might be ok *) ^^ Error: Signature mismatch: Modules do not match: sig type t = M1.t end is not included in sig type t = private M3.t end Type declarations do not match: type t = M1.t is not included in type t = private M3.t The type M1.t is not equal to the type M3.t module M5 : sig type t = private M1.t end Line 1, characters 53-55: 1 | module M6 : sig type t = private < n:int; .. > end = M1;; (* fails *) ^^ Error: Signature mismatch: Modules do not match: sig type t = M1.t end is not included in sig type t = private < n : int; .. > end Type declarations do not match: type t = M1.t is not included in type t = private < n : int; .. > The implementation is missing the method n Line 3, characters 2-51: 3 | struct type t = int let f (x : int) = (x : t) end;; (* must fail *) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Error: Signature mismatch: Modules do not match: sig type t = int val f : int -> t end is not included in sig type t = private Foobar.t val f : int -> t end Type declarations do not match: type t = int is not included in type t = private Foobar.t The type int is not equal to the type Foobar.t module M : sig type t = private T of int val mk : int -> t end module M1 : sig type t = M.t val mk : int -> t end module M2 : sig type t = M.t val mk : int -> t end module M3 : sig type t = M.t val mk : int -> t end Line 3, characters 4-27: 3 | type t = M.t = T of int ^^^^^^^^^^^^^^^^^^^^^^^ Error: This variant or record definition does not match that of type M.t Private variant constructor(s) would be revealed. module M5 : sig type t = M.t = private T of int val mk : int -> t end module M6 : sig type t = private T of int val mk : int -> t end module M' : sig type t_priv = private T of int type t = t_priv val mk : int -> t end module M3' : sig type t = M'.t val mk : int -> t end module M : sig type 'a t = private T of 'a end module M1 : sig type 'a t = 'a M.t = private T of 'a end module Test : sig type t = private A end module Test2 : sig type t = Test.t = private A end val f : Test.t -> Test2.t = val f : Test2.t -> unit = Line 1, characters 8-15: 1 | let a = Test2.A;; (* fail *) ^^^^^^^ Error: Cannot create values of the private type Test2.t Line 3, characters 40-63: 3 | module Test2 : module type of Test with type t = private Test.t = Test;; ^^^^^^^^^^^^^^^^^^^^^^^ Alert deprecated: spurious use of private module Test2 : sig type t = Test.t = private A end type t = private < x : int; .. > type t = private < x : int; .. > type t = private < x : int > type t = private < x : int > Line 1: Error: Type declarations do not match: type !'a t = private 'a constraint 'a = < x : int; .. > is not included in type 'a t Their parameters differ The type < x : int; .. > is not equal to the type 'a type 'a t = private 'a constraint 'a = < x : int; .. > type t = [ `Closed ] type nonrec t = private [> t ]