haskell – 如何进行数据对象的自动数据序列化?

语言中具有某种反思/内容的巨大好处之一是可以从各种来源自动构建对象。

例如,在Java中,我可以使用相同的对象来持久化数据库(使用Hibernate),序列化为XML(使用JAXB),并序列化为JSON(json-lib)。您可以在Ruby和Python中执行相同操作,通常也可以遵循Java的属性或注释的一些简单规则。

所以我不需要很多“域传输对象”。我可以专注于我正在工作的领域。

似乎在非常严格的FP像Haskell和Ocaml这是不可能的。
特别是Haskell。我唯一看到的是做某种预处理或元编程(ocaml)。是否接受你必须从底部向上做所有的变革?

换句话说,您必须做很多无聊的工作,将haskell中的数据类型转换为JSON / XML / DB Row对象,然后重新导入数据对象。

对于什么值得,我认为在OCaml中发现的预处理器解决方案(例如sexplib,binprot和json-wheel等)是非常好的(我认为人们与Template Haskell非常相似)。它比反射效率高得多,也可以以自然的方式调整到个体类型。如果您不喜欢给定类型foo的自动生成的序列化程序,您可以随时编写自己的文件,并将其适合于自动生成的序列化程序,用于将foo作为组件的类型。

唯一的缺点是你需要学习camlp4来为自己写一个。但是使用它们非常简单,一旦您将构建系统设置为使用预处理器。就像在类型定义的末尾添加sexp一样简单:

type t = { foo: int; bar: float }
with sexp

现在你有你的串行器。

翻译自:https://stackoverflow.com/questions/2690455/how-do-i-do-automatic-data-serialization-of-data-objects

转载注明原文:haskell – 如何进行数据对象的自动数据序列化?