Fix precedence handling for Data.Fixed's Show instance (#16031)
authorSven Tennie <sven.tennie@gmail.com>
Wed, 26 Dec 2018 11:04:36 +0000 (12:04 +0100)
committerBen Gamari <ben@smart-cactus.org>
Sun, 6 Jan 2019 12:27:09 +0000 (07:27 -0500)
Use `showsPrec` instead of `show` to respect the precedence of the surrounding
context.

libraries/base/Data/Fixed.hs
libraries/base/tests/data-fixed-show-read.hs
libraries/base/tests/data-fixed-show-read.stdout

index 98acb76..482ec0a 100644 (file)
@@ -158,7 +158,7 @@ showFixed chopTrailingZeros fa@(MkFixed a) = (show i) ++ (withDot (showIntegerZe
 
 -- | @since 2.01
 instance (HasResolution a) => Show (Fixed a) where
-    show = showFixed False
+    showsPrec p n = showParen (p > 6 && n < 0) $ showString $ showFixed False n
 
 -- | @since 4.3.0.0
 instance (HasResolution a) => Read (Fixed a) where
index 7e947f4..8766f0a 100644 (file)
@@ -21,6 +21,10 @@ main = do doit 38.001
           print (read "-38" :: Centi)
           print (read "0.008" :: Fixed B7)
           print (read "-0.008" :: Fixed B7)
+          print $ show (Just (-1 :: Milli))
+          print $ show (Just (1 :: Milli))
+          print ((read $ show (Just (-1 :: Deci))) :: Maybe Deci)
+          print ((read $ show (Just (1 :: Deci))) :: Maybe Deci)
 
 doit :: Centi -> IO ()
 doit c = do let s = show c