如何使用ppx

时间:2017-08-28 07:50:19

标签: ocaml ppx ocaml-dune

如何使用带有jbuilder的ppx为数据类型派生to_string方法?

例如,我尝试使用@@deriving show为数据类型派生show_*方法。我有一个简单的main.ml文件,如下所示:

open Core

type foo = Bar | Baz
  [@@deriving show]

let () = printf "%s\n" (show_foo Bar)

我在同一目录中有一个jbuild文件,如下所示:

(jbuild_version 1)

(executables
 ((names (main))
  (libraries (core ppx_deriving))
  (preprocess (pps (ppx_deriving.show)))))

(install
 ((section bin)
  (files ((main.exe as my_foo)))))

当我运行jbuilder build时,我收到以下错误:

File "main.ml", line 6, characters 24-32:
Error: Unbound value show_foo

似乎jbuilder没有运行ppx_deriving.show预处理器,也没有生成show_foo函数。

我对@@derive show的使用是否正确?我是否需要在jbuild文件中添加内容以使其正常工作?使用ppx_deriving jbuilder时遇到问题吗?我应该使用不同的ppx库吗?我应该使用不同的构建系统吗?大多数OCamler如何处理这些构建系统问题?

编辑:我使用的是OCaml版本4.04.2,jbuilder版本1.0 + beta11,以及ppx_deriving版本4.1。

1 个答案:

答案 0 :(得分:3)

正如您在评论中发现的那样,这需要在ppx_deriving中进行特殊处理,该处理仅在版本4.2中合并。

根本原因是jbuilder使用ppx_driver来应用ppx重写器,而不是-ppx标志。