【问题标题】:How to use Data.MessagePack in Haskell如何在 Haskell 中使用 Data.MessagePack
【发布时间】:2013-03-13 12:15:32
【问题描述】:

MessagePack 是一种二进制序列化格式,显然可以在 Haskell 和 Python 中使用,我需要在我的项目中混合使用这些语言。

我需要序列化的结构相当简单:

data Citation = Citation {
    sourceDocument :: Document,
    targetDocument :: Document,
    links :: [ Reference ]
}

type Reference = (Int, Int)

data Document = Document {
    words :: [ ByteString ],
    wordNums :: [ Int ]
}

但我不知道从哪里开始。显然,MessagePack 的库支持某种deriving mechanism,通过使“文档”自动成为 OBJECT 的实例,可以轻松完成上述操作,但到目前为止我调用自动派生的尝试都失败了......

你怎么看?

这里是图书馆的链接:http://hackage.haskell.org/package/msgpack-0.7.1.5 以下是一些示例的链接,根据上述版本的文档,这些示例都不起作用:

  1. http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+Haskell

【问题讨论】:

    标签: python haskell serialization messagepack


    【解决方案1】:

    我对 msgpack 不熟悉,但猜测这样的东西应该可以工作。

    {-# LANGUAGE TemplateHaskell #-}
    
    import Data.MessagePack.Derive
    
    -- I don't know which of these lines you need
    -- I also don't know whether the True should actually be False
    $(deriveObject True ''Document)
    $(derivePack True ''Document)
    $(deriveUnpack True ''Document)
    

    (n.b。一般来说,向我们展示您尝试过但不起作用的代码会很有帮助,而不是让我们猜测您的尝试可能因为您没有启用 TemplateHaskell 或其他原因而无法正常工作。)

    【讨论】:

    • 谢谢@dave4420。是的,下次我会写下我的尝试,但事实是我没有想到 $ 的东西,我没有尝试过。
    • 看起来 msgpack Haskell lib 作者在最新版本中禁用了自动派生。
    • 确实是@donatello。这在data-msgpack 中不可用。
    猜你喜欢
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2017-03-09
    • 2015-09-20
    • 2017-09-17
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多