gpt4 book ai didi

haskell - 序列化 Data.Text 的实例?

转载 作者:行者123 更新时间:2023-12-03 15:03:08 25 4
gpt4 key购买 nike

我需要将使用 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 了解不够快速正确地序列化/反序列化它。

这个问题有标准解决方案吗? (我也不喜欢使用 Cereal 的 Serialize 实例,但我遇到了一些与使用二进制包有关的版本问题;binary-0.5.1.1 似乎不能很好地支持泛型,我想避免编写样板。)

最佳答案

这是我最终使用的实例,基于 Joachim Britner 的建议:

instance Serialize Text where
put txt = put $ encodeUtf8 txt
get = fmap decodeUtf8 get

正如所指出的,您可能需要不同的编码/解码功能,但结构应该相同。

关于haskell - 序列化 Data.Text 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19365523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com