Safe Haskell | Trustworthy |
---|---|
Language | Haskell2010 |
An abstract interface to a concurrent unique symbol generator.
Unlike Data.Unique
from base
the values are not a member of Ord
. However, there is no global bottleneck.
Documentation
Unique identifiers are created by creating heap objects in kind # that can be compared for value equality and then hashing them using their initial allocation address.
>>>
x <- newUnique
>>>
y <- newUnique
>>>
z <- newUnique
>>>
[x == x, y == y, z == z]
[True,True,True]
>>>
[x == y, y == z, z == x]
[False,False,False]
The hashes could be same, in theory, but in practice they are different as well.
>>>
[ hash x == hash x, hash y == hash y, hash z == hash z]
[True,True,True]
>>>
[ hash x == hash y, hash y == hash z, hash z == hash x]
[False,False,False]