X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Text%2FRead%2FLex.hs;h=7fdf024aab60c87a2254f01aba219c063512a8ce;hb=66aeadbe43dcb4f95e5bc47f45be6509a983540b;hp=5442f36d30200510f1735de9f47e6d5fa3e5b924;hpb=0bc2ecb672fd031739471dee90d8b1efb96d005e;p=ghc-base.git diff --git a/Text/Read/Lex.hs b/Text/Read/Lex.hs index 5442f36..7fdf024 100644 --- a/Text/Read/Lex.hs +++ b/Text/Read/Lex.hs @@ -340,12 +340,21 @@ lexNumberBase base = where value xs mFrac mExp = valueFracExp (val (fromIntegral base) 0 xs) mFrac mExp - valueFracExp a Nothing mExp = Left (valueExp a mExp) + valueFracExp a Nothing mExp + | validIntExp mExp = Left (valueExpInt a mExp) + | otherwise = Right (valueExp (fromIntegral a) mExp) valueFracExp a (Just fs) mExp = Right (valueExp (fromInteger a + frac (fromIntegral base) 0 1 fs) mExp) + -- only positive exponents allowed + validIntExp Nothing = True + validIntExp (Just e) = e >= 0 + + valueExpInt a Nothing = a + valueExpInt a (Just exp) = a * ((fromIntegral base) ^ exp) + valueExp a Nothing = a - valueExp a (Just exp) = a * (fromIntegral base ^ exp) + valueExp a (Just exp) = a * ((fromIntegral base) ^^ exp) lexFrac :: Base -> ReadP (Maybe Digits) lexFrac base =