Le type d'une classe est récursif si le nom du type apparaît dans la description du type. Par exemple, une classe dont l'une des méthodes renvoie self en résultat aura un type récursif:
# class duplicable = object(self) val x = 1 method getx = x method clone = self end;; class duplicable : object ('a) val x : int method clone : 'a method getx : int end
Dans ce type, la variable de type
'a est une abréviation pour le nom de la classe duplicable.
On peut le réecrire (nous notons 'a = ):
Une situation analogue se présente lorsqu'une méthode prend en paramètre un objet de même type que self. Par exemple, rajoutons aux points une méthode equal pour comparer les coordonées du point avec celles d'un autre point passé en paramètre:
class point init = object(self: 'a) val mutable x = init method getx = x method print = print_int x method equal (y:'a) = y#getx = self#getx end;; class point : int -> object ('a) val mutable x : int method equal : 'a -> bool method getx : int method print : unit end