X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Numeric.hs;h=bde290df10ee1a196fcc72a1206b3e48192cb67c;hb=abcc6295f998cd28bc4de3b3c8d7266dec462bac;hp=5603ae6c072c0e880a49c9147b35c7b6f1e036d5;hpb=bba5c1507d5742b71d045654b48e229f9cf1022d;p=ghc-base.git diff --git a/Numeric.hs b/Numeric.hs index 5603ae6..bde290d 100644 --- a/Numeric.hs +++ b/Numeric.hs @@ -30,7 +30,6 @@ module Numeric ( showIntAtBase, -- :: Integral a => a -> (a -> Char) -> a -> ShowS showHex, -- :: Integral a => a -> ShowS showOct, -- :: Integral a => a -> ShowS - showBin, -- :: Integral a => a -> ShowS showEFloat, -- :: (RealFloat a) => Maybe Int -> a -> ShowS showFFloat, -- :: (RealFloat a) => Maybe Int -> a -> ShowS @@ -142,36 +141,20 @@ showGFloat d x = showString (formatRealFloat FFGeneric d x) -- --------------------------------------------------------------------------- -- Integer printing functions -showIntAtBase :: Integral a => a -> (a -> Char) -> a -> ShowS +showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS showIntAtBase base toChr n r - | n < 0 = error ("Numeric.showIntAtBase: applied to negative number " ++ show n) - | otherwise = - case quotRem n base of { (n', d) -> - let c = toChr d in - seq c $ -- stricter than necessary - let - r' = c : r - in - if n' == 0 then r' else showIntAtBase base toChr n' r' - } - -showHex :: Integral a => a -> ShowS -showHex n r = - showString "0x" $ - showIntAtBase 16 (toChrHex) n r - where - toChrHex d - | d < 10 = chr (ord '0' + fromIntegral d) - | otherwise = chr (ord 'a' + fromIntegral (d - 10)) - -showOct :: Integral a => a -> ShowS -showOct n r = - showString "0o" $ - showIntAtBase 8 (toChrOct) n r - where toChrOct d = chr (ord '0' + fromIntegral d) - -showBin :: Integral a => a -> ShowS -showBin n r = - showString "0b" $ - showIntAtBase 2 (toChrOct) n r - where toChrOct d = chr (ord '0' + fromIntegral d) + | base <= 1 = error ("Numeric.showIntAtBase: applied to unsupported base " ++ show base) + | n < 0 = error ("Numeric.showIntAtBase: applied to negative number " ++ show n) + | otherwise = showIt (quotRem n base) r + where + showIt (n,d) r = seq c $ -- stricter than necessary + case n of + 0 -> r' + _ -> showIt (quotRem n base) r' + where + c = toChr (fromIntegral d) + r' = c : r + +showHex, showOct :: Integral a => a -> ShowS +showHex = showIntAtBase 16 intToDigit +showOct = showIntAtBase 8 intToDigit