Il suffit de faire une définition de type de classe. Dans les classes, les "nil" et "cons" les contraintes de types peuvent être simplifiées.
module Liste = struct
  exception Nil
  class virtual ['a] liste =
    object (_:'alist)
      method virtual hd : 'a
      method virtual tl : 'alist
      method virtual null : bool
      method virtual length : int
    end
  class ['a] nil =
    object
      inherit ['a] liste
      method hd = raise Nil method tl = raise Nil
      method null = true method length = 0
    end
  class ['a] cons h t =
    object 
      inherit ['a] liste
      val hd = h val tl = t
      method hd = h
      method tl = t
      method null = false
      method length = 1 + tl#length
    end
end;;