我有一些使用 Camlp5 的旧代码。我一直使用 Debian 附带的 Camlp5 版本。现在这个版本8.00.04处于严格模式。我的旧代码不再编译。问题似乎是定义多态类型的语法。一个最小的例子是
let loc = Ploc.dummy
let _ = <:str_item< declare
type t 'a = unit;
end >>
当我这样做时
ocamlopt.opt -I +camlp5 -pp "camlp5o q_MLast.cmo" minimal.ml
我明白了
File "minimal.ml", line 3, characters 8-54:
3 | ........<:str_item< declare
| type t 'a = unit;
3 | end >>
Error: This expression has type 'a option
but an expression was expected of type bool option * bool
我的猜测是,自从上次编译成功以来,Debian 从 Camlp5 的过渡模式切换到了严格模式。但是,我不知道多态类型定义需要什么语法严格模式。也没有在哪里可以查到。
如何将旧代码转换为适用于新版本的 Camlp5?
回答我自己的问题。
显然,类型变量没有引号。因此我需要使用反引号:
let loc = Ploc.dummy
let _ = <:str_item< declare
type t $list:[Ploc.VaVal (Some "a"), (None,false)]$ = unit;
end >>