The one not yet mentioned in the discussion is that you can redefine .[] and .[]<- as long as you do it inside a module named String, AFAIR. There’s a thread here on Discuss on how such valuable lexical estate is wasted on strings, but I can’t find it.
P.S. .[]<- is not available anymore: Syntaxic sugar: String.set → Bytes.set? - Learning - OCaml