Это выражение:
ref Some !(c.next)
анализируется следующим образом:
(ref Some) !(c.next)
по сути, потому что приложение функции в OCaml имеет очень высокий приоритет.
Вы должны заключить в скобки как this:
ref (Some !(c.next))
После исправления этой проблемы у вас есть другая проблема синтаксиса. Это выражение:
let a = ref (Some !(c.next));
недопустимо. Вам нужно иметь in
после let
. Краткое описание состоит в том, что внутри функции let
используется для введения локальной переменной, а выражение, использующее локальную переменную, появляется после in
. in
требуется. Это можно исправить, изменив ;
в конце на in
.
После исправления этих двух проблем с синтаксисом у вас есть по крайней мере одна ошибка типа. Но я надеюсь, что это поможет вам добиться прогресса.