背景:我使用的是Emacs 23.3,OCaml 3.12.0和tuareg 1.45.7。
我正在查看Hickey OCaml book,并尝试在pg上运行示例。本书的157,.pdf的167。问题出现在表达式
中type ’a blob = < draw : unit; .. > as ’a
当我在tuareg模式下输入我的emacs缓冲区,并尝试使用C-c C-e
对其进行评估时,我在caml toplevel中收到以下错误:
# 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; .. >
所以我的问题是:为什么这不起作用,我该如何解决?更新tuareg似乎不是一个选项:我尝试使用tuareg版本2.0,但这甚至不能正确加载。
更新:截至12/8/12,这已在tuareg SVN中继中修复。我不认为他们已经使用修复程序更新了版本,但您可以使用
匿名获取主干svn checkout svn://svn.forge.ocamlcore.org/svn/tuareg/trunk
牢记关于开发版本与发布版本的常见警告。
答案 0 :(得分:3)
这是图阿雷格的一个错误。由于某种原因,他无法正确计算短语的结尾。要解决它,有两种可能性:
将您的类型括在括号中:type 'a t = (<..> as 'a)
有效
手动将其发送到顶层:复制该行,将其粘贴到顶层缓冲区中,然后添加;;
(在顶层中使用短语分隔符,在可以推断时在源代码中为可选项)。 / p>
编辑:似乎是错误has been reported upstream。希望他们迟早能解决它。