1

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

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

另外,我知道您可以将 Uniques 散列成整数,但 Hugs 说“两个 Uniques 可能散列到相同的值,尽管实际上这不太可能”。有谁知道可能性有多大?

4

1 回答 1

6

生成Unique值需要IO,所以你的比较失败,因为类型aIO Unique,不是UniquenewUnique >>= \u -> return (u == u)应该按预期工作。

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

于 2012-09-21T16:46:58.683 回答