我如何推导 to_string
使用带有 jbuilder 的 ppx 的数据类型的方法?
例如,我正在尝试使用 @@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 版。
最佳答案
正如您在评论中发现的,这需要在 ppx_deriving
中进行特殊处理。仅在 4.2 版中合并。
根本原因是jbuilder
用途 ppx_driver
应用 ppx 重写器而不是 -ppx
旗帜。
关于ocaml - 如何使用 ppx 为数据类型派生 to_string 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45914171/