X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FTypeable.hs;h=d187296faca25b2f75762d32521ef6844e5beb46;hb=93b9a4ab1adffb656b3f65ac5a9ebe89d10adef8;hp=e9b06732b7e120219873cc6e325bff38cab54c6c;hpb=18068216d7d40cba4a39ab4893b752dc818d6b1e;p=haskell-directory.git diff --git a/Data/Typeable.hs b/Data/Typeable.hs index e9b0673..d187296 100644 --- a/Data/Typeable.hs +++ b/Data/Typeable.hs @@ -53,6 +53,7 @@ module Data.Typeable typeRepTyCon, -- :: TypeRep -> TyCon typeRepArgs, -- :: TypeRep -> [TypeRep] tyConString, -- :: TyCon -> String + typeRepKey, -- :: TypeRep -> IO Int -- * The other Typeable classes -- | /Note:/ The general instances are provided for GHC only. @@ -163,9 +164,21 @@ data TyCon = TyCon !Key String instance Eq TyCon where (TyCon t1 _) == (TyCon t2 _) = t1 == t2 - #endif +-- | Returns a unique integer associated with a 'TypeRep'. This can +-- be used for making a mapping ('Data.IntMap.IntMap') with TypeReps +-- as the keys, for example. It is guaranteed that @t1 == t2@ if and only if +-- @typeRepKey t1 == typeRepKey t2@. +-- +-- 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 +typeRepKey (TypeRep (Key i) _ _) = return i + -- -- let fTy = mkTyCon "Foo" in show (mkTyConApp (mkTyCon ",,") -- [fTy,fTy,fTy])