Camlp5:将多态类型定义转换为严格语法

问题描述 投票:0回答:1

我有一些使用 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?

ocaml camlp4
1个回答
0
投票

回答我自己的问题。

显然,类型变量没有引号。因此我需要使用反引号:

let loc = Ploc.dummy

let _ = <:str_item< declare
  type t $list:[Ploc.VaVal (Some "a"), (None,false)]$ = unit;
end >>
© www.soinside.com 2019 - 2024. All rights reserved.