On Sat, Jan 1, 2011 at 12:42 PM, Daniel Fischer
<daniel.is.fisc...@googlemail.com> wrote:
> I don't think so, it's in IO for a reason:
>
>> -- | Returns a unique integer associated with a 'TypeRep'.  This can
>> -- be used for making a mapping with TypeReps
>> -- as the keys, for example.  It is guaranteed that @t1 == t2@
>> -- if and only if @typeRepKey t1 == typeRepKey t...@.
>> --
>> -- It is in the 'IO' monad because the actual value of the key may
>> -- vary from run to run of the program.  You should only rely on
>> -- the equality property, not any actual key value.  The relative
>> -- ordering of keys has no meaning either.
>> --
>> typeRepKey :: TypeRep -> IO Int
>
> That also means that an Ord instance based on the keys may change from run
> to run. It's probably not a problem for applications if it's only used for
> storing TypeReps in a Map and not for programme logic (if typeOf 'a' <
> typeOf True then this else that), but it's somewhat fishy nevertheless.

The reason for putting typeRepKey inside IO is changing between runs.
So that means that compare should also be in IO.

But, if you want to have a strang Ord instance, then why not have a
strange unsafeTypeRepKey :: TypeRep -> Int?

Cheers!

-- 
Felipe.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to