2017-08-28 91 views
3

推導數據類型的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版本。

+0

當張貼有關'jbuilder'的問題,既要包括'* .opam'文件? 'jbuilder'看這個文件來弄清楚如何構建可執行文件嗎? – illabout

+1

我只是想更新'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

+0

使用上述兩種封裝版本,該代碼也可以與OCaml的版本'4.05.0'。 – illabout

回答

3

正如你在評論中發現的,這需要ppx_deriving特別處理,這是隻有在4.2版本合併。

其根本原因是jbuilder使用ppx_driver來應用ppx重寫器而不是-ppx標誌。