使用sexplib序列化Ocaml类型

使用sexplib序列化Ocaml类型,ocaml,Ocaml,我正在尝试使用sexplib来序列化和反序列化一个自定义ocaml记录类型,该记录类型具有如下内联定义 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

我正在尝试使用sexplib来序列化和反序列化一个自定义ocaml记录类型,该记录类型具有如下内联定义

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]
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]
当我尝试使用
ocamlfind ocamlc-package sexpliblib、ppx\u sexp\u conv-linkpkg microblog\u app.ml
编译此文件时,我得到错误
失败(“不支持Pcstr\u记录”)
文件“microblog_app.ml”,第1行:
错误:运行外部预处理器时出错

我看到ppx_sexp_conv在当前版本中不支持内联定义。不幸的是,我不能使用他们的开发版本,因为它会 导致版本与我的其他软件包冲突。因此,我尝试更改内联定义,如下所示

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]
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]

我在以后的代码中只使用了函数
sexp\u of_eff
eff\u of_sexp
。当我编译它时,我得到错误
error:unboundvalue usernamePwd\u of_sexp
。我在代码中根本不使用这个函数。有人能告诉我如何解决这个错误吗?

您添加的
[@@deriving sexp]
注释生成一些调用
usernamePwd\u of_sexp的代码(由于ppx的工作方式,它无法知道这个函数是否存在,所以它依赖于它的存在)

此函数不存在。您可以通过将
[@@deriving sexp]
添加到
usernamePwd
声明(和其他类型)来创建它

另一种方法是使类型声明递归(
type usernamePwd=…和leaderId=…和type eff=…[@@deriving sexp]