Sexplib 的语法扩展使得在 OCaml 中任意用户定义的数据结构的序列化和反序列化变得容易。通常通过with sexp
在类型定义的末尾添加注释来完成:
type a = A of int | B of float with sexp
这似乎没有直接推广到基于函子的类型,也不清楚 Sexplib 标准类型转换器如何捕获甚至标准函子。
到目前为止,我已经通过int Map.Make(String).t
在序列化之前将特定的 Map 类型实例(例如 )扁平化为列表来解决这个问题,反之亦然,但 Sexplib/Jane Street Core 的雄心勃勃的作者肯定没有完全忽视这一点。我还注意到旧版本的电池将自定义 sexp 序列化混合到它们的主要模块(如 [Bat]Map)中,但这已经被删除了一段时间。
Sexplib 序列化通常如何使用 Maps 或其他复杂函子类型?