From: Simon Marlow Date: Mon, 13 Sep 2010 21:47:33 +0000 (+0000) Subject: tighten up parsing of numbers (#1579) X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=0520e41d74023fa16fd6be1d9439a747fb82ff0f;p=ghc-base.git tighten up parsing of numbers (#1579) --- diff --git a/GHC/Read.lhs b/GHC/Read.lhs index b568287..1a7b6a8 100644 --- a/GHC/Read.lhs +++ b/GHC/Read.lhs @@ -451,28 +451,28 @@ instance Read L.Lexeme where %********************************************************* \begin{code} -readNumber :: Num a => (L.Lexeme -> Maybe a) -> ReadPrec a +readNumber :: Num a => (L.Lexeme -> ReadPrec a) -> ReadPrec a -- Read a signed number readNumber convert = parens ( do x <- lexP case x of - L.Symbol "-" -> do n <- readNumber convert + L.Symbol "-" -> do y <- lexP + n <- convert y return (negate n) - - _ -> case convert x of - Just n -> return n - Nothing -> pfail + + _ -> convert x ) -convertInt :: Num a => L.Lexeme -> Maybe a -convertInt (L.Int i) = Just (fromInteger i) -convertInt _ = Nothing -convertFrac :: Fractional a => L.Lexeme -> Maybe a -convertFrac (L.Int i) = Just (fromInteger i) -convertFrac (L.Rat r) = Just (fromRational r) -convertFrac _ = Nothing +convertInt :: Num a => L.Lexeme -> ReadPrec a +convertInt (L.Int i) = return (fromInteger i) +convertInt _ = pfail + +convertFrac :: Fractional a => L.Lexeme -> ReadPrec a +convertFrac (L.Int i) = return (fromInteger i) +convertFrac (L.Rat r) = return (fromRational r) +convertFrac _ = pfail instance Read Int where readPrec = readNumber convertInt