我所知道的用于在Haskell中序列化和反序列化数据的两个主要竞争包是二进制和谷类。什么时候应该选择其中一个包呢?还是有其他我忽视的选择?
答案 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
,则可以更轻松地找到所需的相关库。