2017-01-22 6 views
2

私はシリアライズしOCamlの型をシリアル化するsexplibを使用して

type eff = Add of {username: string; pwd: string} 
| AddFollowing of {leader_id: id} 
| RemFollowing of {leader_id: id} 
| AddFollower of {follower_id: id} 
| RemFollower of {follower_id: id} 
| Blocks of {follower_id: id} 
| GetBlocks 
| IsBlockedBy of {leader_id: id} 
| GetIsBlockedBy 
| GetInfo 
| GetFollowers 
| GetFollowing [@@deriving sexp] 

を次のように私はこの私が手ocamlfind ocamlc -package sexplib,ppx_sexp_conv -linkpkg microblog_app.mlを使用してコンパイルしようとするインライン定義を持つカスタムOCamlのレコード型をデシリアライズするためにsexplibを使用しようとしていますエラーFailure("Pcstr_record not supported") File "microblog_app.ml", line 1: Error: Error while running external preprocessor

ppx_sexp_convは、現在のリリースでインライン定義をサポートしていないことがわかりました。残念ながら、 は他のパッケージとバージョンの競合を引き起こすため、私は開発リリースを使用できません。だから私は、私は私の後のコード内の関数sexp_of_effeff_of_sexpを使用

type usernamePwd = {username: string; pwd: string} 
type leaderId = {leader_id: id} 
type followerId = {follower_id: id} 
type eff = Add of usernamePwd 
| AddFollowing of leaderId 
| RemFollowing of leaderId 
| AddFollower of followerId 
| RemFollower of followerId 
| Blocks of followerId 
| GetBlocks 
| IsBlockedBy of leaderId 
| GetIsBlockedBy 
| GetInfo 
| GetFollowers 
| GetFollowing [@@deriving sexp] 

を次のようにインライン定義を変更しようとしました。私がこれをコンパイルすると、エラーError: Unbound value usernamePwd_of_sexpが出ます。私は自分のコードでこの関数を全く使用しません。誰かがこのエラーを解決する方法を教えてもらえますか?

答えて

2

追加した注釈は、usernamePwd_of_sexpを呼び出すコードを生成します(ppxが機能するため、この関数が存在するかどうかわからないため、その存在に依存します)。

この機能は存在しません。宣言(およびその他のタイプ)をusernamePwdに追加することで作成できます。

代わりに、型宣言を再帰的(type usernamePwd = ... and leaderId = ... and type eff = ... [@@deriving sexp])にすることもできます。

関連する問題