【问题标题】:Is there a Template Haskell / deriving mechanism for Data.Binary (or friends?)Data.Binary(或朋友?)是否有模板 Haskell / 派生机制
【发布时间】:2012-01-03 15:39:35
【问题描述】:

Data.Binary 文档显示了手动编写实例。有没有解决的办法?我看到here 有另一个库 SerTH,它具有(基于 Haskell 的模板)派生机制,但指向它的链接似乎已损坏。此外,如果您了解其他库,那么良好的性能对我们来说至关重要。

提前谢谢你!

【问题讨论】:

  • GHC 7.2 使用默认派生本机支持这一点...我为它编写了一段时间的代码,它非常简单

标签: serialization haskell binary-data deriving


【解决方案1】:

http://hackage.haskell.org/packages/archive/binary/0.7.1.0/doc/html/Data-Binary.html#g:3

 {-# LANGUAGE DeriveGeneric #-}

 import Data.Binary
 import GHC.Generics (Generic)

 data Foo = Foo
          deriving (Generic)

 -- GHC will automatically fill out the instance
 instance Binary Foo

【讨论】:

    【解决方案2】:

    Neil Mitchells Derive package 有一个用于派生二进制实例的模板 haskell 宏。

    【讨论】:

      【解决方案3】:

      既然您询问了其他库:

      cereal 数据序列化库具有 cereal-derive,它与 GHC 7.2 中的新泛型支持一起使用。与 Template Haskell 相比,它具有编译时速度优势(我现在倾向于避免 TH,因为它使编译变得更慢),并且与 SYB 和 Uniplate 等数据类型通用方法相比,它具有运行时速度优势。

      cereal 与二进制非常相似,但使用严格的 ByteStrings;二进制自 2009 年以来一直没有更新,谷物有诸如 IEEE-754 float format support 之类的细节,所以如果你想派生,我看不出有任何理由不使用它而不是二进制。

      【讨论】:

      • cereal-derive 是 GPL3。这可能是某些用例的问题。
      • 惰性字节串在某些用例中更容易
      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2012-12-04
      相关资源
      最近更新 更多