Haskell Can';t使新数据类型可散列
尝试在OS X 10.9.3上使用ghc 7.8.2编译以下内容Haskell Can';t使新数据类型可散列,haskell,Haskell,尝试在OS X 10.9.3上使用ghc 7.8.2编译以下内容 import Data.Hashable(Hashable,hash) 数据边v=边v导出(显示) 实例(Eq v)=>Eq(边v),其中 边x1 x2==边y1 y2= x1==y1&&x2==y2 | | x1==y2&&x2==y1 实例(Hashable v)=>Hashable(Edge v),其中 散列(边x1x2)=(散列x1)+(散列x2) 失败于 Could not deduce (hashable-1.2.1
import Data.Hashable(Hashable,hash)
数据边v=边v导出(显示)
实例(Eq v)=>Eq(边v),其中
边x1 x2==边y1 y2=
x1==y1&&x2==y2 | | x1==y2&&x2==y1
实例(Hashable v)=>Hashable(Edge v),其中
散列(边x1x2)=(散列x1)+(散列x2)
失败于
Could not deduce (hashable-1.2.1.0:Data.Hashable.Class.GHashable
(GHC.Generics.Rep (Edge v)))
arising from a use of ‘hashable-1.2.1.0:Data.Hashable.Class.$gdmhashWithSalt’
from the context (Hashable v)
bound by the instance declaration at src/MinCut.hs:12:10-42
In the expression:
hashable-1.2.1.0:Data.Hashable.Class.$gdmhashWithSalt
In an equation for ‘hashWithSalt’:
hashWithSalt
= hashable-1.2.1.0:Data.Hashable.Class.$gdmhashWithSalt
In the instance declaration for ‘Hashable (Edge v)’
有什么不对?的hackage docs声明Hashable的最小实现是函数hashWithSalt
-查看typeclass声明下的文档(class Hashable a where
)
因此,如果您将函数更改为hashWithSalt
,则所有功能都应正常工作:
instance (Hashable v) => Hashable (Edge v) where
hashWithSalt s (Edge x1 x2) = s + (hash x1) + (hash x2)
另见