Код из @pad - это то, что я бы использовал, потому что мне нравится обрабатывать строки как неизменяемые, если это возможно. Но я бы не стал использовать Char.escaped
; он специализирован для лексического представления символов в OCaml. Итак, вот что вы получите, если внесете это изменение:
let prefix_char s c = String.make 1 c ^ s
let suffix_char s c = s ^ String.make 1 c
Обновление
За годы, прошедшие с тех пор, как был задан этот вопрос, OCaml изменился, поэтому строки стали неизменяемыми. Отлично.