【发布时间】:2016-02-15 20:15:47
【问题描述】:
我正在尝试在 Haskell 中序列化数据类型,并且想知道如何序列化 GADT。我尝试的方法看起来像(使用 Control.DeepSeq):
data Gadt a where
Cons1 :: Int -> Gadt Int
Cons2 :: Bool -> Gadt Bool
instance NFData Cons1 where rnf = genericRnf
instance NFData Cons2 where rnf = genericRnf
deriveSafeCopy ......
但是,这不会编译:GHC 告诉我 Cons1 和 Cons2 不是有效的构造函数。我可以很好地序列化标准数据类型。序列化 GADT 的最佳方式是什么?
我想序列化 GADT 的原因是因为这种数据类型是我用于项目的 Redis 数据库中的一个键。
【问题讨论】:
-
woops .. 我刚刚看到这根本行不通-您定义的情况会产生此功能:
Cons1 :: forall a . a -> Gadt Int所以我认为您真的在尝试做其他事情吗? -
您可能想查看instant-generics,它通常用于处理 GADT。我自己还没有深入研究它,但它似乎很有趣。
-
是的,我想我确实想要 Cons1 :: Int -> Gadt Int。谢谢!
标签: haskell serialization