ThreadId has a Show instance that makes uses the FFI to turn a ThreadId to a CInt:

    instance Show ThreadId where
       showsPrec d t =
            showString "ThreadId " .
            showsPrec d (getThreadId (id2TSO t))

    foreign import ccall unsafe "rts_getThreadId" getThreadId :: ThreadId# -> CInt

Can getThreadId be exported? This would make it possible to write a Hashable instance for ThreadId, and it would make it possible to use a ThreadId to index into an array (with modulus of course).

-Andrew Thaddeus Martin