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



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

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

另外,我知道您可以将唯一身份散列为整数,但Hugs说"两个唯一数可以散列到相同的值,尽管实际上这不太可能"。有谁知道可能性有多小?

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

至于碰撞的可能性有多大,请注意它会产生Int,而不是Integer。因此,如果没有别的,只有有限数量的可能Int值,所以如果哈希值完全是随机的,那么碰撞将只是生日"悖论"。在实践中,它的可能性可能略高,但可能不会很大。

最新更新