2017-08-28 10 views
3

jbuilderのppxを使用してデータ型に対してto_stringメソッドを導出するにはどうすればよいですか?ppxを使用してデータ型のto_stringメソッドを派生する方法

たとえば、@@deriving showを使用して、データ型にshow_*メソッドを派生させようとしています。私はjbuilder buildを実行すると、私は次のエラーを取得する

(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) 

:私はこのようになりますシンプルな main.mlファイルを持っています:

File "main.ml", line 6, characters 24-32: 
Error: Unbound value show_foo 

それは、jbuilderppx_deriving.showプリプロセッサを実行していないように思える、と目を生成しませんe show_foo機能。

@@derive showの使用は正しいですか?正常に動作させるには、jbuildファイルに何かを追加する必要がありますか? ppx_derivingにはjbuilderで問題がありますか?別のppxライブラリを使用する必要がありますか?別のビルドシステムを使用すべきですか?ほとんどのOCamlerは、こうした種類のビルドシステムの問題にどのように対処していますか?


編集:私は、JBuilderのバージョン1.0 + beta11をOCamlのバージョン4.04.2を使用して、バージョン4.1をppx_derivingています。

+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

上記の2つのパッケージバージョンを使用して、このコードはOCamlバージョン '4.05.0'でも動作します。 – illabout

答えて

3

コメントに見られるように、これはバージョン4.2でのみマージされたppx_derivingの特別な処理が必要です。

根本的な理由は、jbuilderppx_driverを使用して、-ppxフラグではなくppxリライタを適用するということです。

関連する問題