【发布时间】:2014-01-19 13:21:58
【问题描述】:
我需要将DAWG(由this library) 提供的字节串提供)序列化。正如我在文档中看到的那样,有一个实例(Ord b, Binary b) => Binary (DAWG a b) 似乎对此提供了支持,我尝试直接使用@987654324 @:
import qualified Data.DAWG.Dynamic as Dawg
import qualified Data.Binary as Bin
Bin.encode $ Dawg.fromList [("foo",1),("bar",2)]
但是 GHC 抱怨说有no instance for (Bin.Binary (Dawg.DAWG Char b0))。我明白有必要告诉 GHC 图表包含哪些数据类型,但是,它是如何完成的?如果我错了,我应该怎么做?
编辑:
Bin.encode $ Dawg.fromList [("foo"::String,1::Int),("bar",2)] 的堆栈跟踪:
<interactive>:19:1:
No instance for (Bin.Binary (Dawg.DAWG Char Int))
arising from a use of `Bin.encode'
Possible fix:
add an instance declaration for (Bin.Binary (Dawg.DAWG Char Int))
In the expression: Bin.encode
In the expression:
Bin.encode
$ Dawg.fromList [("foo" :: String, 1 :: Int), ("bar", 2)]
In an equation for `it':
it
= Bin.encode
$ Dawg.fromList [("foo" :: String, 1 :: Int), ("bar", 2)]
【问题讨论】:
-
如果没有完整的错误,我无法确定,但可能你被咬了,因为
1和2是多态的。给其中一个类型签名(例如:: Int),看看会发生什么。 -
你试过
Bin.encode $ Dawg.fromList [("foo",1::Int),("bar",2::Int)]吗?我认为Binary需要一个具体类型才能自动序列化数字。 -
我刚试过这个,但 GHC 仍然抱怨(尽管它知道将图形类型识别为
Dawg.DAWG Char Int)。 -
如果没有看到错误,很难猜测发生了什么...也许您启用了
OverloadedStrings?Bin.encode $ Dawg.fromList [("foo"::String,1::Int),("bar",2)]呢? -
好吧,你肯定会有一个带有匹配哈希的
binary实例。问题是你是否还有另一个。ghc-pkg list binary显示了多少个binary包?
标签: haskell