The only problem is the method concat that is a pseudo-binary method. 
There are two possible solutions. The first is not to make it a binary
method, and let the class be parametric: 
|  |  | 
| class ['a] ostring s = object (self)
      val s = s
      method repr = s
      method concat (t:'a) = {< s = s ^ t # repr >}
    end;; |  | 
The second, more natural solution is to make concat a binary method by
making the parameter be the self-type.
|  |  | 
| class ostring s = object (self : 'a)
      val s = s
      method repr = s
      method concat (t:'a) = {< s = s ^ t # repr >}
    end;; |  |