Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我知道在 Haskell 中序列化和反序列化数据的两个主要竞争包是二进制和谷类。什么时候应该选择其中一个包而不是另一个包?还是我忽略了其他选择?
它们不是竞争,它们是互补的。 cereal适用于严格的字节串,而binary适用于惰性。由于其惰性,binary依赖于在解析错误时抛出异常,而cereal可以通过Either.
cereal
binary
Either
此外,暗示“只有”两个主要包是一种歪曲。至少你也应该看看 blaze-builder 。
一方面,浮点的默认编码binary有问题,而不是简单的 IEEE-754 编码。例如,NaN 不能正确往返。没有这样的已知问题。该问题没有得到解决的迹象,但可以通过显式使用类似的东西来规避,这意味着通用派生的实例仍然存在问题。cerealgetFloatleBinary
getFloatle
Binary
但另一方面,它binary似乎比cereal. 目前有 hackage 345包依赖于821依赖于. 因此,如果您选择.cerealbinarybinary