(* TEST expect; *) class ['a] c = object constraint 'a = int method m (x: bool #c) = () end;; [%%expect{| Line 1, characters 0-72: 1 | class ['a] c = object constraint 'a = int method m (x: bool #c) = () end;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Error: The class type #c is used with parameter(s) bool , whereas the class type definition constrains those parameters to be int |}] class ['a, 'b] c = object constraint 'a = int method m (x: (bool, 'b) #c) = () end;; [%%expect{| Line 1, characters 0-82: 1 | class ['a, 'b] c = object constraint 'a = int method m (x: (bool, 'b) #c) = () end;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Error: The class type #c is used with parameter(s) (bool, 'b) , whereas the class type definition constrains those parameters to be (int, 'b) |}] class c = object method m (x: #c) = int_of_string x#m end;; [%%expect{| Line 1, characters 0-57: 1 | class c = object method m (x: #c) = int_of_string x#m end;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Error: The abbreviation #c expands to type < m : 'a -> int; .. > but is used with type < m : string; .. > as 'a |}]