{-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude, MagicHash #-} module GHC.Internal.Numeric ( showSigned, showIntAtBase, showInt, showBin, showHex, showOct, showEFloat, showFFloat, showGFloat, showFFloatAlt, showGFloatAlt, showFloat, showHFloat, floatToDigits, readSigned, readInt, readBin, readDec, readOct, readHex, readFloat, lexDigits, fromRat, Floating(..) ) where import GHC.Internal.Base import GHC.Internal.Read import GHC.Internal.Real import GHC.Internal.Float import GHC.Internal.Num import GHC.Internal.Show import GHC.Internal.Text.ParserCombinators.ReadP( ReadP, readP_to_S, pfail ) import qualified GHC.Internal.Text.Read.Lex as L readInt :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a readInt :: forall a. Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a readInt a base Char -> Bool isDigit Char -> Int valDigit = ReadP a -> ReadS a forall a. ReadP a -> ReadS a readP_to_S (a -> (Char -> Bool) -> (Char -> Int) -> ReadP a forall a. Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadP a L.readIntP a base Char -> Bool isDigit Char -> Int valDigit) readBin :: (Eq a, Num a) => ReadS a readBin :: forall a. (Eq a, Num a) => ReadS a readBin = ReadP a -> ReadS a forall a. ReadP a -> ReadS a readP_to_S ReadP a forall a. (Eq a, Num a) => ReadP a L.readBinP readOct :: (Eq a, Num a) => ReadS a readOct :: forall a. (Eq a, Num a) => ReadS a readOct = ReadP a -> ReadS a forall a. ReadP a -> ReadS a readP_to_S ReadP a forall a. (Eq a, Num a) => ReadP a L.readOctP readDec :: (Eq a, Num a) => ReadS a readDec :: forall a. (Eq a, Num a) => ReadS a readDec = ReadP a -> ReadS a forall a. ReadP a -> ReadS a readP_to_S ReadP a forall a. (Eq a, Num a) => ReadP a L.readDecP readHex :: (Eq a, Num a) => ReadS a readHex :: forall a. (Eq a, Num a) => ReadS a readHex = ReadP a -> ReadS a forall a. ReadP a -> ReadS a readP_to_S ReadP a forall a. (Eq a, Num a) => ReadP a L.readHexP readFloat :: RealFrac a => ReadS a readFloat :: forall a. RealFrac a => ReadS a readFloat = ReadP a -> ReadS a forall a. ReadP a -> ReadS a readP_to_S ReadP a forall a. RealFrac a => ReadP a readFloatP readFloatP :: RealFrac a => ReadP a readFloatP :: forall a. RealFrac a => ReadP a readFloatP = do tok <- ReadP Lexeme L.lex case tok of L.Number Number n -> a -> ReadP a forall a. a -> ReadP a forall (m :: * -> *) a. Monad m => a -> m a return (a -> ReadP a) -> a -> ReadP a forall a b. (a -> b) -> a -> b $ Rational -> a forall a. Fractional a => Rational -> a fromRational (Rational -> a) -> Rational -> a forall a b. (a -> b) -> a -> b $ Number -> Rational L.numberToRational Number n Lexeme _ -> ReadP a forall a. ReadP a pfail readSigned :: (Real a) => ReadS a -> ReadS a readSigned :: forall a. Real a => ReadS a -> ReadS a readSigned ReadS a readPos = Bool -> ReadS a -> ReadS a forall a. Bool -> ReadS a -> ReadS a readParen Bool False ReadS a read' where read' :: ReadS a read' String r = ReadS a read'' String r [(a, String)] -> [(a, String)] -> [(a, String)] forall a. [a] -> [a] -> [a] ++ (do ("-",s) <- ReadS String lex String r (x,t) <- read'' s return (-x,t)) read'' :: ReadS a read'' String r = do (str,s) <- ReadS String lex String r (n,"") <- readPos str return (n,s) showInt :: Integral a => a -> ShowS showInt :: forall a. Integral a => a -> ShowS showInt a n0 String cs0 | a n0 a -> a -> Bool forall a. Ord a => a -> a -> Bool < a 0 = ShowS forall a. String -> a errorWithoutStackTrace String "GHC.Internal.Numeric.showInt: can't show negative numbers" | Bool otherwise = a -> ShowS forall a. Integral a => a -> ShowS go a n0 String cs0 where go :: t -> ShowS go t n String cs | t n t -> t -> Bool forall a. Ord a => a -> a -> Bool < t 10 = case Int -> Char unsafeChr (Char -> Int ord Char '0' Int -> Int -> Int forall a. Num a => a -> a -> a + t -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral t n) of c :: Char c@(C# Char# _) -> Char cChar -> ShowS forall a. a -> [a] -> [a] :String cs | Bool otherwise = case Int -> Char unsafeChr (Char -> Int ord Char '0' Int -> Int -> Int forall a. Num a => a -> a -> a + t -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral t r) of c :: Char c@(C# Char# _) -> t -> ShowS go t q (Char cChar -> ShowS forall a. a -> [a] -> [a] :String cs) where (t q,t r) = t n t -> t -> (t, t) forall a. Integral a => a -> a -> (a, a) `quotRem` t 10 {-# SPECIALIZE showEFloat :: Maybe Int -> Float -> ShowS, Maybe Int -> Double -> ShowS #-} {-# SPECIALIZE showFFloat :: Maybe Int -> Float -> ShowS, Maybe Int -> Double -> ShowS #-} {-# SPECIALIZE showGFloat :: Maybe Int -> Float -> ShowS, Maybe Int -> Double -> ShowS #-} showEFloat :: (RealFloat a) => Maybe Int -> a -> ShowS showFFloat :: (RealFloat a) => Maybe Int -> a -> ShowS showGFloat :: (RealFloat a) => Maybe Int -> a -> ShowS showEFloat :: forall a. RealFloat a => Maybe Int -> a -> ShowS showEFloat Maybe Int d a x = String -> ShowS showString (FFFormat -> Maybe Int -> a -> String forall a. RealFloat a => FFFormat -> Maybe Int -> a -> String formatRealFloat FFFormat FFExponent Maybe Int d a x) showFFloat :: forall a. RealFloat a => Maybe Int -> a -> ShowS showFFloat Maybe Int d a x = String -> ShowS showString (FFFormat -> Maybe Int -> a -> String forall a. RealFloat a => FFFormat -> Maybe Int -> a -> String formatRealFloat FFFormat FFFixed Maybe Int d a x) showGFloat :: forall a. RealFloat a => Maybe Int -> a -> ShowS showGFloat Maybe Int d a x = String -> ShowS showString (FFFormat -> Maybe Int -> a -> String forall a. RealFloat a => FFFormat -> Maybe Int -> a -> String formatRealFloat FFFormat FFGeneric Maybe Int d a x) showFFloatAlt :: (RealFloat a) => Maybe Int -> a -> ShowS showGFloatAlt :: (RealFloat a) => Maybe Int -> a -> ShowS showFFloatAlt :: forall a. RealFloat a => Maybe Int -> a -> ShowS showFFloatAlt Maybe Int d a x = String -> ShowS showString (FFFormat -> Maybe Int -> Bool -> a -> String forall a. RealFloat a => FFFormat -> Maybe Int -> Bool -> a -> String formatRealFloatAlt FFFormat FFFixed Maybe Int d Bool True a x) showGFloatAlt :: forall a. RealFloat a => Maybe Int -> a -> ShowS showGFloatAlt Maybe Int d a x = String -> ShowS showString (FFFormat -> Maybe Int -> Bool -> a -> String forall a. RealFloat a => FFFormat -> Maybe Int -> Bool -> a -> String formatRealFloatAlt FFFormat FFGeneric Maybe Int d Bool True a x) showHFloat :: RealFloat a => a -> ShowS showHFloat :: forall a. RealFloat a => a -> ShowS showHFloat = String -> ShowS showString (String -> ShowS) -> (a -> String) -> a -> ShowS forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> String forall {a}. RealFloat a => a -> String fmt where fmt :: a -> String fmt a x | a -> Bool forall a. RealFloat a => a -> Bool isNaN a x = String "NaN" | a -> Bool forall a. RealFloat a => a -> Bool isInfinite a x = (if a x a -> a -> Bool forall a. Ord a => a -> a -> Bool < a 0 then String "-" else String "") String -> ShowS forall a. [a] -> [a] -> [a] ++ String "Infinity" | a x a -> a -> Bool forall a. Ord a => a -> a -> Bool < a 0 Bool -> Bool -> Bool || a -> Bool forall a. RealFloat a => a -> Bool isNegativeZero a x = Char '-' Char -> ShowS forall a. a -> [a] -> [a] : a -> String forall {a}. RealFloat a => a -> String cvt (-a x) | Bool otherwise = a -> String forall {a}. RealFloat a => a -> String cvt a x cvt :: a -> String cvt a x | a x a -> a -> Bool forall a. Eq a => a -> a -> Bool == a 0 = String "0x0p+0" | Bool otherwise = case Integer -> a -> ([Int], Int) forall a. RealFloat a => Integer -> a -> ([Int], Int) floatToDigits Integer 2 a x of r :: ([Int], Int) r@([], Int _) -> ShowS forall a. HasCallStack => String -> a error ShowS -> ShowS forall a b. (a -> b) -> a -> b $ String "Impossible happened: showHFloat: " String -> ShowS forall a. [a] -> [a] -> [a] ++ ([Int], Int) -> String forall a. Show a => a -> String show ([Int], Int) r (Int d:[Int] ds, Int e) -> String "0x" String -> ShowS forall a. [a] -> [a] -> [a] ++ Int -> String forall a. Show a => a -> String show Int d String -> ShowS forall a. [a] -> [a] -> [a] ++ [Int] -> String forall {a}. Integral a => [a] -> String frac [Int] ds String -> ShowS forall a. [a] -> [a] -> [a] ++ String "p" String -> ShowS forall a. [a] -> [a] -> [a] ++ Int -> String forall a. Show a => a -> String show (Int eInt -> Int -> Int forall a. Num a => a -> a -> a -Int 1) frac :: [a] -> String frac [a] digits | [a] -> Bool forall {a}. (Eq a, Num a) => [a] -> Bool allZ [a] digits = String "" | Bool otherwise = String "." String -> ShowS forall a. [a] -> [a] -> [a] ++ [a] -> String forall {a}. Integral a => [a] -> String hex [a] digits where hex :: [a] -> String hex [a] ds = case [a] ds of [] -> String "" [a a] -> a -> a -> a -> a -> ShowS forall {a}. Integral a => a -> a -> a -> a -> ShowS hexDigit a a a 0 a 0 a 0 String "" [a a,a b] -> a -> a -> a -> a -> ShowS forall {a}. Integral a => a -> a -> a -> a -> ShowS hexDigit a a a b a 0 a 0 String "" [a a,a b,a c] -> a -> a -> a -> a -> ShowS forall {a}. Integral a => a -> a -> a -> a -> ShowS hexDigit a a a b a c a 0 String "" a a : a b : a c : a d : [a] r -> a -> a -> a -> a -> ShowS forall {a}. Integral a => a -> a -> a -> a -> ShowS hexDigit a a a b a c a d ([a] -> String hex [a] r) hexDigit :: a -> a -> a -> a -> ShowS hexDigit a a a b a c a d = a -> ShowS forall a. Integral a => a -> ShowS showHex (a 8a -> a -> a forall a. Num a => a -> a -> a *a a a -> a -> a forall a. Num a => a -> a -> a + a 4a -> a -> a forall a. Num a => a -> a -> a *a b a -> a -> a forall a. Num a => a -> a -> a + a 2a -> a -> a forall a. Num a => a -> a -> a *a c a -> a -> a forall a. Num a => a -> a -> a + a d) allZ :: [a] -> Bool allZ [a] xs = case [a] xs of a x : [a] more -> a x a -> a -> Bool forall a. Eq a => a -> a -> Bool == a 0 Bool -> Bool -> Bool && [a] -> Bool allZ [a] more [] -> Bool True showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS showIntAtBase :: forall a. Integral a => a -> (Int -> Char) -> a -> ShowS showIntAtBase a base Int -> Char toChr a n0 String r0 | a base a -> a -> Bool forall a. Ord a => a -> a -> Bool <= a 1 = ShowS forall a. String -> a errorWithoutStackTrace (String "GHC.Internal.Numeric.showIntAtBase: applied to unsupported base " String -> ShowS forall a. [a] -> [a] -> [a] ++ Integer -> String forall a. Show a => a -> String show (a -> Integer forall a. Integral a => a -> Integer toInteger a base)) | a n0 a -> a -> Bool forall a. Ord a => a -> a -> Bool < a 0 = ShowS forall a. String -> a errorWithoutStackTrace (String "GHC.Internal.Numeric.showIntAtBase: applied to negative number " String -> ShowS forall a. [a] -> [a] -> [a] ++ Integer -> String forall a. Show a => a -> String show (a -> Integer forall a. Integral a => a -> Integer toInteger a n0)) | Bool otherwise = (a, a) -> ShowS showIt (a -> a -> (a, a) forall a. Integral a => a -> a -> (a, a) quotRem a n0 a base) String r0 where showIt :: (a, a) -> ShowS showIt (a n,a d) String r = Char -> ShowS forall a b. a -> b -> b seq Char c ShowS -> ShowS forall a b. (a -> b) -> a -> b $ case a n of a 0 -> String r' a _ -> (a, a) -> ShowS showIt (a -> a -> (a, a) forall a. Integral a => a -> a -> (a, a) quotRem a n a base) String r' where c :: Char c = Int -> Char toChr (a -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral a d) r' :: String r' = Char c Char -> ShowS forall a. a -> [a] -> [a] : String r showHex :: Integral a => a -> ShowS showHex :: forall a. Integral a => a -> ShowS showHex = a -> (Int -> Char) -> a -> ShowS forall a. Integral a => a -> (Int -> Char) -> a -> ShowS showIntAtBase a 16 Int -> Char intToDigit showOct :: Integral a => a -> ShowS showOct :: forall a. Integral a => a -> ShowS showOct = a -> (Int -> Char) -> a -> ShowS forall a. Integral a => a -> (Int -> Char) -> a -> ShowS showIntAtBase a 8 Int -> Char intToDigit showBin :: Integral a => a -> ShowS showBin :: forall a. Integral a => a -> ShowS showBin = a -> (Int -> Char) -> a -> ShowS forall a. Integral a => a -> (Int -> Char) -> a -> ShowS showIntAtBase a 2 Int -> Char intToDigit
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4