Haskell中是否有任何通用的Hashable类型类? (又称“派生(可哈希)”))

| 是否有人编写过通用函数,以便可以针对自定义数据类型自动生成“ 0”函数(使用“ 1”机制)?几次,我写了以下样板
data LeafExpr = Var Name | Star deriving (Eq, Show)
instance Hashable LeafExpr where
    hash (Var name) = 476743 * hash name
    hash Star = 152857
这可以自动生成:基本思想是,每当添加数据时,您都要乘以一个质数,例如与列表,
hash (x:xs) = hash x + 193847 * hash xs
本质上,我想写的是
data LeafExpr = ... deriving (Hashable)
编辑1 谢谢大家的所有非常有帮助的回复。有时间时,我将尝试添加通用方法作为练习。就目前而言(也许是sclv指的是什么?),我意识到我可以编写稍微好一点的代码,
instance Hashable LeafExpr where
    hash (Var name) = hash (\"Leaf-Var\", name)
    hash Star = hash \"Leaf-Star\"
编辑2 使用ghc,乘以随机质数比在编辑1中纠结要好得多。与Data.HashTable的冲突从95%(非常糟糕)变为36%。代码在这里:[http://pastebin.com/WD0Xp0T1] [http://pastebin.com/Nd6cBy6G]。     
已邀请:
您需要多少速度?您可以使用使用模板haskell的软件包之一来生成序列化代码,以将值转换为二进制,然后使用hashable哈希二进制数组。     

要回复问题请先登录注册