如何使用带有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。
答案 0 :(得分:3)
正如您在评论中发现的那样,这需要在ppx_deriving
中进行特殊处理,该处理仅在版本4.2中合并。
根本原因是jbuilder
使用ppx_driver
来应用ppx重写器,而不是-ppx
标志。