On Saturday 01 January 2011 15:07:13, Thomas Davie wrote: > On 1 Jan 2011, at 12:38, Andreas Baldeau wrote: > > > > So the question is, if ghc could transform this to simply compare the > > keys throwing away unsafePerformIO and return. > > Wouldn't a much better plan simply be to take typeRepKey out of the IO > monad?
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. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
