如何使用ppx
问题描述:
推导数据类型的to_string方法如何使用ppx和jbuilder推导to_string
数据类型的方法?如何使用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
预处理器,并且不会产生次e 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
标志。
当张贴有关'jbuilder'的问题,既要包括'* .opam'文件? 'jbuilder'看这个文件来弄清楚如何构建可执行文件吗? – illabout
我只是想更新'jbuilder'和'ppx_deriving'现在这似乎工作。我的'jbuilder'版本是[1.0 + beta12](https://github.com/janestreet/jbuilder/blob/1c85e646bc732189739e31e697b5e60bbd2221ba/CHANGES.md#10beta12-18082017)和'ppx_deriving'是版本[4.2](https://开头github.com/ocaml-ppx/ppx_deriving/blob/7969277d1ec02517f441930e449d115d64a2a778/CHANGELOG.md#42)。 – illabout
使用上述两种封装版本,该代码也可以与OCaml的版本'4.05.0'。 – illabout