fix show minBound (issue #77)
authorAshley Yakeley <ashley@semantic.org>
Sun, 7 Jan 2018 08:14:51 +0000 (00:14 -0800)
committerAshley Yakeley <ashley@semantic.org>
Sun, 7 Jan 2018 08:14:51 +0000 (00:14 -0800)
lib/Data/Time/Calendar/Private.hs
lib/Data/Time/Format.hs
test/main/Test/LocalTime/Time.hs
test/main/Test/LocalTime/TimeRef.hs

index 0a443de..63f58bd 100644 (file)
@@ -9,22 +9,31 @@ showPadded :: PadOption -> String -> String
 showPadded NoPad s = s
 showPadded (Pad i c) s = replicate (i - length s) c ++ s
 
-showPaddedNum :: (Num t,Ord t,Show t) => PadOption -> t -> String
-showPaddedNum NoPad i = show i
-showPaddedNum pad i | i < 0 = '-':(showPaddedNum pad (negate i))
-showPaddedNum pad i = showPadded pad $ show i
+class (Num t,Ord t,Show t) => ShowPadded t where
+    showPaddedNum :: PadOption -> t -> String
+
+instance ShowPadded Integer where
+    showPaddedNum NoPad i = show i
+    showPaddedNum pad i | i < 0 = '-':(showPaddedNum pad (negate i))
+    showPaddedNum pad i = showPadded pad $ show i
+
+instance ShowPadded Int where
+    showPaddedNum NoPad i = show i
+    showPaddedNum _pad i | i == minBound = show i
+    showPaddedNum pad i | i < 0 = '-':(showPaddedNum pad (negate i))
+    showPaddedNum pad i = showPadded pad $ show i
 
 show2Fixed :: Pico -> String
 show2Fixed x | x < 10 = '0':(showFixed True x)
 show2Fixed x = showFixed True x
 
-show2 :: (Num t,Ord t,Show t) => t -> String
+show2 :: (ShowPadded t) => t -> String
 show2 = showPaddedNum $ Pad 2 '0'
 
-show3 :: (Num t,Ord t,Show t) => t -> String
+show3 :: (ShowPadded t) => t -> String
 show3 = showPaddedNum $ Pad 3 '0'
 
-show4 :: (Num t,Ord t,Show t) => t -> String
+show4 :: (ShowPadded t) => t -> String
 show4 = showPaddedNum $ Pad 4 '0'
 
 mod100 :: (Integral i) => i -> i
index 6d08371..4881943 100644 (file)
@@ -52,7 +52,7 @@ padGeneral trunc fdef idef cdef ff locale mnpad mi = ff locale $ getPadOption tr
 padString :: (TimeLocale -> t -> String) -> (TimeLocale -> Maybe NumericPadOption -> Maybe Int -> t -> String)
 padString ff = padGeneral False False 1 ' ' $ \locale pado -> showPadded pado . ff locale
 
-padNum :: (Show i,Ord i,Num i) => Bool -> Int -> Char -> (t -> i) -> (TimeLocale -> Maybe NumericPadOption -> Maybe Int -> t -> String)
+padNum :: (ShowPadded i) => Bool -> Int -> Char -> (t -> i) -> (TimeLocale -> Maybe NumericPadOption -> Maybe Int -> t -> String)
 padNum fdef idef cdef ff = padGeneral False fdef idef cdef $ \_ pado -> showPaddedNum pado . ff
 
 -- <http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html>
index d2be089..3eacbb2 100644 (file)
@@ -100,7 +100,9 @@ testTimeOfDayToDayFraction
     in unlines [ show $ f $ TimeOfDay 12 34 56.789
                , show $ f $ TimeOfDay 12 34 56.789123
                , show $ f $ TimeOfDay 12 34 56.789123456
-               , show $ f $ TimeOfDay 12 34 56.789123456789 ]
+               , show $ f $ TimeOfDay 12 34 56.789123456789
+               , show $ f $ TimeOfDay minBound 0 0
+               ]
 
 testTime :: TestTree
 testTime = testCase "testTime" $
index 2fd691e..b1a5199 100644 (file)
@@ -878,4 +878,5 @@ testTimeRef =
   ,"12:34:56.789123"
   ,"12:34:56.789123456"
   ,"12:34:56.789123456789"
+  ,"-9223372036854775808:00:00"
   ,"" ]