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

jcc*_*333 1 haskell

拥抱Data.Unique的页面似乎表明Unique派生了Eq,但我显然不明白.例如,为什么我不能这样做?

Prelude> let a = Data.Unique.newUnique
Prelude> a == a
Run Code Online (Sandbox Code Playgroud)

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

C. *_*ann 6

生成Unique值要求IO,所以你的比较失败,因为类型aIO Unique,没有Unique.newUnique >>= \u -> return (u == u)应该按预期工作.

至于碰撞的可能性,请注意它Int不会产生Integer.所以如果没有别的,只有有限数量的可能Int值,所以如果哈希值完全是随机的,那么发现碰撞只会是生日"悖论".在实践中,它可能比这更可能,但可能不是很多.