Redo instance to be more efficient (see #8778, #9203)
authorIavor S. Diatchki <diatchki@galois.com>
Mon, 16 Jun 2014 22:58:49 +0000 (15:58 -0700)
committerIavor S. Diatchki <diatchki@galois.com>
Mon, 16 Jun 2014 22:58:49 +0000 (15:58 -0700)
libraries/base/Data/Typeable/Internal.hs

index eae2109..5b1cde4 100644 (file)
@@ -423,8 +423,9 @@ deriving instance Typeable Typeable
 -- Instances for type literals
 
 instance KnownNat n => Typeable (n :: Nat) where
-  typeRep# p = mkTyConApp tc []
+  typeRep# = \_ -> rep
     where
+    rep = mkTyConApp tc []
     tc = TyCon
            { tyConHash     = fingerprintString (mk pack modu nm)
            , tyConPackage  = pack
@@ -433,13 +434,14 @@ instance KnownNat n => Typeable (n :: Nat) where
            }
     pack = "base"
     modu = "GHC.TypeLits"
-    nm   = show (natVal' p)
+    nm   = show (natVal' (proxy# :: Proxy# n))
     mk a b c = a ++ " " ++ b ++ " " ++ c
 
 
 instance KnownSymbol s => Typeable (s :: Symbol) where
-  typeRep# p = mkTyConApp tc []
+  typeRep# = \_ -> rep
     where
+    rep = mkTyConApp tc []
     tc = TyCon
            { tyConHash     = fingerprintString (mk pack modu nm)
            , tyConPackage  = pack
@@ -448,6 +450,6 @@ instance KnownSymbol s => Typeable (s :: Symbol) where
            }
     pack = "base"
     modu = "GHC.TypeLits"
-    nm   = show (symbolVal' p)
+    nm   = show (symbolVal' (proxy# :: Proxy# s))
     mk a b c = a ++ " " ++ b ++ " " ++ c