Dear list, I'm not sure why the following class definition is typed the way it is: OCaml version 4.02.1 # class type ['a] c = object ('a) method m : 'b end;; class type ['a] c = object ('a) constraint 'a = < m : 'b. 'b; .. > method m : 'b end In particular I don't understand why the method m gets a polymorphic type. This bites me when I try to specialize the type : # type 'a t = (< m : int ; .. > as 'a) c;; Error: This type < m : int; .. > should be an instance of type 'a c as 'a Types for method m are incompatible Instead of the type with polymorphic methods, I would have expected the following type: # class type ['a] c = object ('a) constraint 'a = < m : 'b; .. > method m : 'b end;; class type ['a] c = object ('a) constraint 'a = < m : 'b; .. > method m : 'b end And then have no problems doing what I wanted: # type 'a t = (< m : int ; .. > as 'a) c;; type 'a t = 'a constraint 'a = < m : int > What did I get wrong? Cheers, Philippe.