(* TEST expect; *) module X = struct type t = | A : 'a * 'b * ('a -> unit) -> t end;; [%%expect{| module X : sig type t = A : 'a * 'b * ('a -> unit) -> t end |}] module Y = struct type t = X.t = | A : 'a * 'b * ('b -> unit) -> t end;; (* should fail *) [%%expect{| Lines 2-3, characters 2-37: 2 | ..type t = X.t = 3 | | A : 'a * 'b * ('b -> unit) -> t Error: This variant or record definition does not match that of type "X.t" Constructors do not match: "A : 'a * 'b * ('a -> unit) -> X.t" is not the same as: "A : 'a * 'b * ('b -> unit) -> X.t" The type "'a -> unit" is not equal to the type "'b -> unit" Type "'a" is not equal to type "'b" |}] (* would segfault let () = match Y.A (1, "", print_string) with | X.A (x, y, f) -> f x *)