Ocaml 如何使用ppx导出数据类型的to_字符串方法

Ocaml 如何使用ppx导出数据类型的to_字符串方法,ocaml,ppx,ocaml-dune,Ocaml,Ppx,Ocaml Dune,我如何使用ppx with为数据类型派生to_string方法 例如,我试图使用派生数据类型的show.*方法。我有一个简单的main.ml文件,如下所示: open Core type foo = Bar | Baz [@@deriving show] let () = printf "%s\n" (show_foo Bar) (jbuild_version 1) (executables ((names (main)) (libraries (core ppx_derivi

我如何使用ppx with为数据类型派生
to_string
方法

例如,我试图使用派生数据类型的
show.*
方法。我有一个简单的
main.ml
文件,如下所示:

open Core

type foo = Bar | Baz
  [@@deriving show]

let () = printf "%s\n" (show_foo Bar)
(jbuild_version 1)

(executables
 ((names (main))
  (libraries (core ppx_deriving))
  (preprocess (pps (ppx_deriving.show)))))

(install
 ((section bin)
  (files ((main.exe as my_foo)))))
我在同一目录中有一个
jbuild
文件,如下所示:

open Core

type foo = Bar | Baz
  [@@deriving show]

let () = printf "%s\n" (show_foo Bar)
(jbuild_version 1)

(executables
 ((names (main))
  (libraries (core ppx_deriving))
  (preprocess (pps (ppx_deriving.show)))))

(install
 ((section bin)
  (files ((main.exe as my_foo)))))
运行
jbuilderbuild
时,出现以下错误:

File "main.ml", line 6, characters 24-32:
Error: Unbound value show_foo
似乎
jbuilder
没有运行
ppx\u派生.show
预处理器,也没有生成
show\u foo
函数

我使用的
@@show
正确吗?我是否需要向我的
jbuild
文件中添加一些内容才能使其正常工作?
ppx\u派生
在使用
jbuilder
时是否有问题?我应该使用不同的ppx库吗?我应该使用不同的构建系统吗?大多数ocamler如何处理此类构建系统问题



编辑:我正在使用OCaml版本4.04.2、jbuilder版本1.0+beta11和ppx_派生版本4.1。

正如您在评论中所发现的,这需要在仅合并到版本4.2中的
ppx_派生中进行特殊处理


根本原因是
jbuilder
使用
ppx\u驱动程序
应用ppx重写器,而不是
-ppx
标志。

在发布有关
jbuilder
的问题时,是否需要包含
*.opam
文件?
jbuilder
是否查看此文件以了解如何构建可执行文件?我刚刚尝试更新了
jbuilder
ppx\u-deriving
,现在似乎可以了。My
jbuilder
版本为,而
ppx_派生版本为。使用上述两个软件包版本,此代码也适用于OCaml版本
4.05.0