Auto-derive a few manually coded Show instances
authorHerbert Valerio Riedel <hvr@gnu.org>
Fri, 19 Sep 2014 08:25:34 +0000 (10:25 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Fri, 19 Sep 2014 09:36:55 +0000 (11:36 +0200)
In `base`, the instances

  instance Show ()
  instance Show Bool
  instance Show Ordering
  instance Show a => Show (Maybe a)

where defined manually, even though we can leverage GHC's auto-deriver
which is perfectly capable by standalone derivation to avoid boiler-plate
code such as this.

Reviewed By: austin

Differential Revision: https://phabricator.haskell.org/D219

libraries/base/GHC/Show.lhs
testsuite/tests/perf/compiler/all.T

index 93320ee..2834817 100644 (file)
@@ -179,8 +179,7 @@ appPrec1 = I# 11#       -- appPrec + 1
 
 \begin{code}
 
-instance  Show ()  where
-    showsPrec _ () = showString "()"
+deriving instance Show ()
 
 instance Show a => Show [a]  where
   {-# SPECIALISE instance Show [String] #-}
@@ -188,14 +187,8 @@ instance Show a => Show [a]  where
   {-# SPECIALISE instance Show [Int] #-}
   showsPrec _         = showList
 
-instance Show Bool where
-  showsPrec _ True  = showString "True"
-  showsPrec _ False = showString "False"
-
-instance Show Ordering where
-  showsPrec _ LT = showString "LT"
-  showsPrec _ EQ = showString "EQ"
-  showsPrec _ GT = showString "GT"
+deriving instance Show Bool
+deriving instance Show Ordering
 
 instance  Show Char  where
     showsPrec _ '\'' = showString "'\\''"
@@ -216,12 +209,7 @@ showWord w# cs
                c# ->
                    showWord (w# `quotWord#` 10##) (C# c# : cs)
 
-instance Show a => Show (Maybe a) where
-    showsPrec _p Nothing s = showString "Nothing" s
-    showsPrec p (Just x) s
-                          = (showParen (p > appPrec) $
-                             showString "Just " .
-                             showsPrec appPrec1 x) s
+deriving instance Show a => Show (Maybe a)
 \end{code}
 
 
index be09a1c..96e2e11 100644 (file)
@@ -229,7 +229,7 @@ test('T3064',
             # expected value: 14 (x86/Linux 28-06-2012):
             # 2013-11-13:     18 (x86/Windows, 64bit machine)
             # 2014-01-22:     23 (x86/Linux)
-           (wordsize(64), 52, 20)]),
+           (wordsize(64), 42, 20)]),
             # (amd64/Linux):            18
             # (amd64/Linux) 2012-02-07: 26
             # (amd64/Linux) 2013-02-12: 23; increased range to 10%