The StableName
package allows us to establish constant time comparisons of arbitrary data types. The Hackage documentation elegantly describes this (http://hackage.haskell.org/package/base-4.7.0.0/docs/System-Mem-StableName.html):
"Stable names solve the following problem: suppose you want to build a hash table with Haskell objects as keys, but you want to use pointer equality for comparison; maybe because the keys are large and hashing would be slow, or perhaps because the keys are infinite in size. We can't build a hash table using the address of the object as the key, because objects get moved around by the garbage collector, meaning a re-hash would be necessary after every garbage collection."