谷物与二进制

时间:2013-02-02 02:34:49

标签: haskell serialization deserialization

我所知道的用于在Haskell中序列化和反序列化数据的两个主要竞争包是二进制和谷类。什么时候应该选择其中一个包呢?还是有其他我忽视的选择?

2 个答案:

答案 0 :(得分:9)

他们没有竞争,他们是互补的。 cereal适用于严格的字节串,binary适用于懒惰。由于其惰性,binary依赖于在解析错误时抛出异常,而cereal可能会通过Either失败。

另外,暗示“只有”两个主要包是虚假陈述。至少你应该看看blaze-builder。

答案 1 :(得分:0)

首先,binary有浮点questionable default encoding,而不是简单的IEEE-754编码。因此,例如,NaN不能正确往返。 cereal没有这样一个已知问题。该问题没有显示出解决的迹象,但可以通过明确使用getFloatle之类的内容来规避,这意味着Binary的一般派生实例仍然存在问题。

另一方面,binary似乎比cereal更受欢迎。目前有一些hackage 345软件包取决于依赖于cereal的{​​{1}} vs 821。因此,如果您选择binary,则可以更轻松地找到所需的相关库。