如何使用派生的Eq for Data.Unique?

时间:2012-09-21 16:36:41

标签: haskell

Hugs' page for Data.Unique似乎表明Unique派生了Eq,但我显然不明白。例如,为什么我不能这样做?

Prelude> let a = Data.Unique.newUnique
Prelude> a == a

另外,我知道你可以将Uniques哈希转换成整数,但Hugs说“两个唯一身份可能会散列到相同的值,尽管在实践中这不太可能”。有谁知道不太可能吗?

1 个答案:

答案 0 :(得分:6)

生成Unique值需要IO,因此您的比较失败,因为a的类型为IO Unique,而不是UniquenewUnique >>= \u -> return (u == u)应按预期工作。

至于碰撞的可能性,请注意它会产生Int,而不是Integer。因此,如果没有别的,只有有限数量的可能Int值,因此如果哈希值完全是随机的,则发现冲突只是the Birthday "Paradox"。在实践中,它可能比这更可能,但可能不是很多。