如何使用jbuild和ppx_driver与ppx_deriving

时间:2017-05-03 23:14:14

标签: ocaml ppx

我正在尝试将jbuilderppx_derivingppx_deriving_yojson一起使用)一起使用,但现在卡住了一个多小时。我当前的方法是jbuild文件,包含以下内容:

(jbuild_version 1)
(executables
((names (my-binary))
(libraries
 (ppx_deriving
  ppx_deriving_yojson
  cohttp
  yojson))
(preprocess (pps (ppx_deriving_yojson ppx_driver.runner)))))

但结果是

Command [5] exited with code 1:
$ (cd _build/default && ../.ppx/default/ppx_deriving_yojson+ppx_driver.runner/ppx.exe --dump-ast -o src/my_file.pp.ml --impl src/my_file.ml)
File "src/my_file.ml", line 16, characters 5-13:
Error: Attribute `deriving' was not used

使用ppx_driver手动在_build/.ppx/default/ppx_deriving_yojson+ppx_driver.runner/ppx.exe中运行生成的-print-transformations会得到空输出,所以我显然错过了一些内容。

只需将topkgppx_deriving作为依赖项加入,ppx_deriving_yojson代码就可以正常构建。

1 个答案:

答案 0 :(得分:2)

截至最近的ppx_deriving_yojson版本,这应该是可能的。

代码:

type t = {x: int; y: int} [@@deriving to_yojson]

let () = print_endline (Yojson.Safe.to_string (to_yojson {x= 1; y= 2}))

示例jbuild文件:

(jbuild_version 1)

(executables
 ((names (main))
  (preprocess (pps (ppx_deriving_yojson)))
  (libraries (ppx_deriving_yojson.runtime))))

(install
 ((section bin)
  (files ((main.exe as main)))))