[Haskell-cafe] Re: Efficient or predictable Ord for Typeable

George Russell ger at informatik.uni-bremen.de
Tue Nov 30 08:13:01 EST 2004


(me)
> I suggest you implement
>
>    hashTypeable :: Typeable -> IO Int32
>


Lennart wrote (snipped)
> And/or
>     mkHashTypeable :: IO (Typeable -> Int32)


Although this is OK, a general hash function might well need
to return IO HashKey.

A while back, before Data.Unique, I implemented a Unique module
with interface:

    newUnique :: IO Unique
    uniqCompare :: Unique -> Unique -> IO Ordering

The values returned by uniqCompare are guaranteed to be consistent.
This implementation (which was not meant terribly seriously) was
unusual because it did not use unsafePerformIO or any other global
state, though it did need MVars and access to the current thread
identifier (if in a concurrent world).  The ordering was constructed
dynamically as you called uniqCompare.  The source is here:

    http://www.mail-archive.com/glasgow-haskell-users@haskell.org/msg01109/Unique.hs

Converting the function to be of type

    getUniqCompare :: IO (Unique -> Unique -> Ordering)

would be impossible.  I suspect there may be other cases where you
dynamically construct a hash function.


More information about the Haskell-Cafe mailing list