Параметризованные типы OCaml указываются в постфиксном порядке, поэтому тип char ref list
- это прежде всего список. Другими словами, это список ссылок на char:
let (x: char ref list) = [ ref 'a'; ref 'b']
Точно так же тип char list ref
является в первую очередь ссылкой. Это ссылка на список символов:
let (y: char list ref) = ref ['a'; 'b']
Вы хотели второй из этих типов, но ваш код указывает первый тип.