The only problem is the method concat
that is a pseudobinary 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 selftype.
 
class ostring s = object (self : 'a)
val s = s
method repr = s
method concat (t:'a) = {< s = s ^ t # repr >}
end;; 
