【问题标题】:Efficient Serializing of Recursive Data Structures in HaskellHaskell 中递归数据结构的高效序列化
【发布时间】:2011-10-31 17:22:18
【问题描述】:

我目前正在使用从二进制文件构建的 Haskell 中的一些大型 Trie 结构。这个过程需要一些时间,我很好奇是否有一种通用的方法来对递归数据结构进行快速(反)序列化。对于大文件和大 Tries,使用 Show 和 Read 类比从头开始构建尝试慢得多。也许我做错了。

Trie 的形状如下:

type Trie e a = T e [Trie e a]

有什么好的方法可以序列化这样的递归结构?另外,一般来说有什么好的方法来解决这个问题?

【问题讨论】:

  • 你试过binary(二进制序列化库)还是aeson(超快的JSON库)?
  • 我对那些库很熟悉,是的。我以前在其他事情上使用过二进制。虽然它不能解决一般情况下的问题,但这是我问题的症结所在。
  • Show/Read is 很慢,应该会这样。为什么你说binary 在一般情况下不能解决问题?你的意思是你实际上必须编写实例而不是使用deriving
  • @FUZxxl 似乎在包文档中用于派生Binary 的脚本的链接断开了。 darcs.haskell.org/binary/tools/derive/BinaryDerive.hs :(
  • @Alexy 是的。在我手动实现之前,我很好奇是否有更自动的“派生”类型方法。

标签: haskell


【解决方案1】:

如问题的 cmets 所述,文档中用于派生 binary 实例的链接已损坏。但该文件只是存在于一个稍微不同的新 URL 上:http://darcs.haskell.org/packages/binary/tools/derive/BinaryDerive.hs

我还没有使用它,但我认为这可以满足您的需求。

【讨论】:

    【解决方案2】:

    一个通用的解决方案可能是实现FoldableUnfoldable(希望后一个类存在)。

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 2016-05-06
      • 2020-03-25
      • 2018-12-29
      • 2014-02-22
      • 2016-02-26
      • 2011-11-26
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多