如何使用 ppx 为数据类型派生 to_string 方法
how to derive to_string methods for data types using ppx
如何使用 ppx 和 jbuilder 导出 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 库吗?我应该使用不同的构建系统吗?大多数 OCamlers 如何处理这类构建系统问题?
编辑:我使用的是 OCaml 4.04.2 版,jbuilder 1.0+beta11 版,以及 ppx_deriving 4.1 版。
正如您在评论中发现的那样,这需要在 ppx_deriving
中进行特殊处理,它仅在 4.2 版中合并。
根本原因是 jbuilder
使用 ppx_driver
来应用 ppx 重写器而不是 -ppx
标志。
如何使用 ppx 和 jbuilder 导出 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 库吗?我应该使用不同的构建系统吗?大多数 OCamlers 如何处理这类构建系统问题?
编辑:我使用的是 OCaml 4.04.2 版,jbuilder 1.0+beta11 版,以及 ppx_deriving 4.1 版。
正如您在评论中发现的那样,这需要在 ppx_deriving
中进行特殊处理,它仅在 4.2 版中合并。
根本原因是 jbuilder
使用 ppx_driver
来应用 ppx 重写器而不是 -ppx
标志。