以前版本的Data.Messagepack
,0.7.2.5支持deriving instances via Template Haskell。但是,当前版本(1.0.0)doesn't。
我当时想知道是否有另一种方法可以自动派生MessagePack 1.0.0实例,可能使用XDeriveGeneric
?
答案 0 :(得分:3)
作为一种权宜之计,请查看getBenefAccount().getNumber()
github repo的msgpack-aeson
目录:
https://github.com/msgpack/msgpack-haskell/tree/master/msgpack-aeson
你可以从你的数据值< - > aeson< - >消息包。不一定高效,但方便,因为您可以使用message-pack
自动派生ToJSON和FromJSON。
示例代码:
DeriveGeneric
答案 1 :(得分:2)
您可以编写自己的GMessagePack
类,并通过派生Generic
来获取实例。我试着回答这个问题,但我无法推荐。 msgpack不支持和,而one sum type supported by the Haskell msgpack library, Maybe
的编码非常差。
instance MessagePack a => MessagePack (Maybe a) where
toObject = \case
Just a -> toObject a
Nothing -> ObjectNil
fromObject = \case
ObjectNil -> Just Nothing
obj -> fromObject obj
Maybe
的编码无法区分Nothing :: Maybe (Maybe a)
和Just Nothing :: Maybe (Maybe a)
,两者都会被编码为ObjectNil
并解码为Nothing
}。如果我们将MessagePack
个实例强加给显而易见的法律fromObject . toObject == pure
,则MessagePack
的此实例会违反它。