(* TEST * expect *) class type foo_t = object method foo: string end type 'a name = Foo: foo_t name | Int: int name ;; [%%expect{| class type foo_t = object method foo : string end type 'a name = Foo : foo_t name | Int : int name |}] class foo = object(self) method foo = "foo" method cast = function Foo -> (self :> ) end ;; [%%expect{| class foo : object method cast : foo_t name -> < foo : string > method foo : string end |}] class foo: foo_t = object(self) method foo = "foo" method cast: type a. a name -> a = function Foo -> (self :> foo_t) | _ -> raise Exit end ;; [%%expect{| Lines 2-8, characters 2-5: 2 | ..object(self) 3 | method foo = "foo" 4 | method cast: type a. a name -> a = 5 | function 6 | Foo -> (self :> foo_t) 7 | | _ -> raise Exit 8 | end Error: The class type object method cast : 'a name -> 'a method foo : string end is not matched by the class type foo_t The public method cast cannot be hidden |}]