X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Text%2FRead%2FLex.hs;h=33291354b859d7342530db7b4f3455770462ba2e;hb=7dfe4a22aa6a2c598b1496c661c7d532aaafa94f;hp=a2acf471a3e2d51725c64abaa2d00a1c3e3d611f;hpb=10de2c656f74562b662c22928be85e1b3ccda796;p=ghc-base.git diff --git a/Text/Read/Lex.hs b/Text/Read/Lex.hs index a2acf47..3329135 100644 --- a/Text/Read/Lex.hs +++ b/Text/Read/Lex.hs @@ -151,10 +151,10 @@ notANumber = 0 :% 0 lexLitChar :: ReadP Lexeme lexLitChar = - do char '\'' + do _ <- char '\'' (c,esc) <- lexCharE guard (esc || c /= '\'') -- Eliminate '' possibility - char '\'' + _ <- char '\'' return (Char c) lexChar :: ReadP Char @@ -162,10 +162,10 @@ lexChar = do { (c,_) <- lexCharE; return c } lexCharE :: ReadP (Char, Bool) -- "escaped or not"? lexCharE = - do c <- get - if c == '\\' - then do c <- lexEsc; return (c, True) - else do return (c, False) + do c1 <- get + if c1 == '\\' + then do c2 <- lexEsc; return (c2, True) + else do return (c1, False) where lexEsc = lexEscChar @@ -195,7 +195,7 @@ lexCharE = return (chr (fromInteger n)) lexCntrlChar = - do char '^' + do _ <- char '^' c <- get case c of '@' -> return '\^@' @@ -279,7 +279,7 @@ lexCharE = lexString :: ReadP Lexeme lexString = - do char '"' + do _ <- char '"' body id where body f = @@ -293,11 +293,11 @@ lexString = +++ lexCharE lexEmpty = - do char '\\' + do _ <- char '\\' c <- get case c of '&' -> do return () - _ | isSpace c -> do skipSpaces; char '\\'; return () + _ | isSpace c -> do skipSpaces; _ <- char '\\'; return () _ -> do pfail -- --------------------------------------------------------------------------- @@ -314,7 +314,7 @@ lexNumber lexHexOct :: ReadP Lexeme lexHexOct - = do char '0' + = do _ <- char '0' base <- lexBaseChar digits <- lexDigits base return (Int (val (fromIntegral base) 0 digits)) @@ -359,12 +359,12 @@ lexDecNumber = lexFrac :: ReadP (Maybe Digits) -- Read the fractional part; fail if it doesn't -- start ".d" where d is a digit -lexFrac = do char '.' - frac <- lexDigits 10 - return (Just frac) +lexFrac = do _ <- char '.' + fraction <- lexDigits 10 + return (Just fraction) lexExp :: ReadP (Maybe Integer) -lexExp = do char 'e' +++ char 'E' +lexExp = do _ <- char 'e' +++ char 'E' exp <- signedExp +++ lexInteger 10 return (Just exp) where @@ -382,7 +382,7 @@ lexDigits base = return xs where scan (c:cs) f = case valDig base c of - Just n -> do get; scan cs (f.(n:)) + Just n -> do _ <- get; scan cs (f.(n:)) Nothing -> do return (f []) scan [] f = do return (f []) @@ -393,13 +393,13 @@ lexInteger base = val :: Num a => a -> a -> Digits -> a -- val base y [d1,..,dn] = y ++ [d1,..,dn], as it were -val base y [] = y +val _ y [] = y val base y (x:xs) = y' `seq` val base y' xs where y' = y * base + fromIntegral x frac :: Integral a => a -> a -> a -> Digits -> Ratio a -frac base a b [] = a % b +frac _ a b [] = a % b frac base a b (x:xs) = a' `seq` b' `seq` frac base a' b' xs where a' = a * base + fromIntegral x @@ -418,6 +418,9 @@ valDig 16 c | 'A' <= c && c <= 'F' = Just (ord c - ord 'A' + 10) | otherwise = Nothing +valDig _ _ = error "valDig: Bad base" + +valDecDig :: Char -> Maybe Int valDecDig c | '0' <= c && c <= '9' = Just (ord c - ord '0') | otherwise = Nothing