1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
(* 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"
|}]
|