Specialise Eq, Ord, Read, Show at Int, Char, String
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 12 May 2014 09:53:09 +0000 (10:53 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Thu, 28 Aug 2014 10:14:09 +0000 (11:14 +0100)
These instances are quite common, so it's good to have
pre-specialised versions available

libraries/base/GHC/Read.lhs
libraries/base/GHC/Show.lhs
libraries/ghc-prim/GHC/Classes.hs

index ab730e6..2fd9f30 100644 (file)
@@ -423,6 +423,9 @@ instance Read a => Read (Maybe a) where
   readList     = readListDefault
 
 instance Read a => Read [a] where
+  {-# SPECIALISE instance Read [String] #-}
+  {-# SPECIALISE instance Read [Char] #-}
+  {-# SPECIALISE instance Read [Int] #-}
   readPrec     = readListPrec
   readListPrec = readListPrecDefault
   readList     = readListDefault
index 45338e8..09c3c56 100644 (file)
@@ -184,7 +184,10 @@ instance  Show ()  where
     showsPrec _ () = showString "()"
 
 instance Show a => Show [a]  where
-    showsPrec _         = showList
+  {-# SPECIALISE instance Show [String] #-}
+  {-# SPECIALISE instance Show [Char] #-}
+  {-# SPECIALISE instance Show [Int] #-}
+  showsPrec _         = showList
 
 instance Show Bool where
   showsPrec _ True  = showString "True"
index 5bb4cb6..9028f6e 100644 (file)
@@ -83,7 +83,9 @@ deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
                => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
 
 instance (Eq a) => Eq [a] where
+    {-# SPECIALISE instance Eq [[Char]] #-}
     {-# SPECIALISE instance Eq [Char] #-}
+    {-# SPECIALISE instance Eq [Int] #-}
     []     == []     = True
     (x:xs) == (y:ys) = x == y && xs == ys
     _xs    == _ys    = False
@@ -181,7 +183,9 @@ deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
                => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
 
 instance (Ord a) => Ord [a] where
+    {-# SPECIALISE instance Ord [[Char]] #-}
     {-# SPECIALISE instance Ord [Char] #-}
+    {-# SPECIALISE instance Ord [Int] #-}
     compare []     []     = EQ
     compare []     (_:_)  = LT
     compare (_:_)  []     = GT