Почему я не могу оценить эту строку OCaml командой C-c C-e в режиме туарегов? - PullRequest
1 голос
/ 24 апреля 2011

Справочная информация: я использую Emacs 23.3, OCaml 3.12.0 и tuareg 1.45.7.

Я смотрю на книгу Hickey OCaml и пытаюсь запустить примеры на pg. 157 из книги, 167 из .pdf. Проблема возникает с выражением

type ’a blob = < draw : unit; .. > as ’a

Когда я набираю это в своем буфере emacs в режиме tuareg и пытаюсь оценить его с помощью C-c C-e, я получаю следующую ошибку на верхнем уровне caml:

# type 'a blob = < draw : unit; .. > as ';;
Characters 39-41:
  type 'a blob = < draw : unit; .. > as ';;
                                         ^^
Error: Syntax error

Обратите внимание, что последний a не отображается в команде, отправленной на верхний уровень. Если я наберу строку прямо на верхнем уровне, она будет работать нормально:

# type 'a blob = < draw : unit; .. > as 'a;;
type 'a blob = 'a constraint 'a = < draw : unit; .. >

Итак, мой вопрос: почему это не работает, и как я могу это исправить? Обновление туарега, кажется, не вариант: я пытался использовать туарег версии 2.0, но он даже не загружается должным образом.

Обновление : это было исправлено в стволе SVN туарегов по состоянию на 12/8/12. Я не думаю, что они обновили релиз с исправлением, но вы можете анонимно захватить транк с помощью

svn checkout svn://svn.forge.ocamlcore.org/svn/tuareg/trunk

с учетом обычных предостережений о разработке и выпуске версий.

1 Ответ

3 голосов
/ 24 апреля 2011

Это ошибка в Туареге. По какой-то причине он не может правильно вычислить конец фразы. Чтобы обойти это, две возможности:

  • заключите ваш тип в скобки: type 'a t = (<..> as 'a) работает

  • отправьте его на верхний уровень вручную: скопируйте строку, вставьте ее в буфер верхнего уровня и добавьте ;; (разделитель фраз на верхнем уровне, необязательный в исходном коде, когда его можно вывести).

Редактировать: похоже, что ошибка была сообщена выше . Надеюсь, они исправят это рано или поздно.

...