Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Can';t使新数据类型可散列_Haskell - Fatal编程技术网

Haskell Can';t使新数据类型可散列

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

尝试在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.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)
另见