1

Data.UniqueのHugsのページは、UniqueがEqを導出していることを示しているようですが、私にははっきりとわかりません。たとえば、なぜ私はこれを行うことができないのですか?

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

また、一意を整数にハッシュできることは知っていますが、Hugsは、「2つの一意が同じ値にハッシュされる可能性がありますが、実際にはそうはなりません」と述べています。誰かがどれほどありそうもないことを知っていますか?

4

1 に答える 1

6

値の生成にUniqueはが必要です。したがって、のタイプがであり、ではないIOため、比較は失敗します。期待どおりに動作するはずです。aIO UniqueUniquenewUnique >>= \u -> return (u == u)

Int衝突の可能性については、ではなく、を生成することに注意してくださいInteger。したがって、他に何もないとしても、可能なInt値の数は有限であるため、ハッシュ値が完全にランダムである場合、衝突を見つけることは単に誕生日の「パラドックス」になります。実際には、それよりもわずかに可能性が高いかもしれませんが、おそらくそれほどではありません。

于 2012-09-21T16:46:58.683 に答える