class virtual objet :
object('o)
  method invariant: unit -> unit
  (* method check: unit -> unit *)

  method of_string: string -> unit
  method to_string: unit -> string
  method debug: unit -> unit

  (* ugly (but convenient): those methods allow to extend an interface without
   * changing its interface. For instance in oassocbtree I want to
   * provide a method to commit, but doing so will mean break the interface
   * of oassoc. But if provide the commit code via a misc_op_hook, then
   * I will not break the interface.
   *)
  method misc_op_hook: unit -> 'o
  method misc_op_hook2: unit
end
