我需要将数据类型序列化到使用 的磁盘Data.Text
,这是一个示例:
{-# LANGUAGE DeriveGeneric #-}
import Data.Serialize (Serialize)
import Data.Text (Text)
import GHC.Generics
data Foo = Foo Text deriving (Read, Show, Eq, Ord, Generic)
instance Serialize Foo
-- instance Serialize Text
如所写,这会产生错误:
No instance for (Serialize Text)
arising from a use of `Data.Serialize.$gdmput'
Possible fix: add an instance declaration for (Serialize Text)
In the expression: (Data.Serialize.$gdmput)
In an equation for `put': put = (Data.Serialize.$gdmput)
In the instance declaration for `Serialize Foo'
如果我取消注释该instance Serialize Text
行,则会出现这个更神秘的错误:
No instance for (Data.Serialize.GSerialize (Rep Text))
arising from a use of `Data.Serialize.$gdmput'
Possible fix:
add an instance declaration for
(Data.Serialize.GSerialize (Rep Text))
In the expression: (Data.Serialize.$gdmput)
In an equation for `put': put = (Data.Serialize.$gdmput)
In the instance declaration for `Serialize Text'
我可以Serialize
手动实现该实例,但这似乎是孤立实例将成为一个真正问题的情况,此外,我认为我对Data.Text
快速正确地序列化/反序列化它了解不够。
这个问题有标准解决方案吗?(我也不喜欢使用谷物的 Serialize 实例,但我遇到了一些与使用二进制包有关的版本问题;binary-0.5.1.1 似乎不能很好地支持泛型,我想避免编写样板。)