4

如何使用 ppx 和jbuilderto_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 库吗?我应该使用不同的构建系统吗?大多数 OCamlers 如何处理这类构建系统问题?


编辑:我使用的是 OCaml 版本 4.04.2、jbuilder 版本 1.0+beta11 和 ppx_deriving 版本 4.1。

4

1 回答 1

3

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

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

于 2017-08-28T13:04:54.663 回答