on master help sign in
Some nice speedups for parsing floats

--HG-- extra : convert_revision : de095e6497f2a4527dfcae6d3e8c1cfb8cc390b4

commit42afc09315884179b28dedd7219259fe71c2f36b authorBryan O'Sullivan <bos@serpentine.com> dateSat 9 Oct 2010, 00:15 (16 years ago) parente50d43b
1 file changed+3−2
Data/Text/Lex.hs+3−2
Data/Text/Lex.hs+3−2
@@ -107,7 +107,7 @@ signa :: Num a => Parser a -> Parser a
107107{-# SPECIALIZE signa :: Parser Int -> Parser Int #-}
108108{-# SPECIALIZE signa :: Parser Integer -> Parser Integer #-}
109109signa p = do
110− sign <- perhaps '+' $ char (`elem` "-+")
110+ sign <- perhaps '+' $ char (\c -> c == '-' || c == '+')
111111 if sign == '+' then p else negate `liftM` p
112112
113113newtype Parser a = P {
@@ -142,7 +142,8 @@ floaty f = runP $ do
142142 digits <- P $ \t -> Right (T.length $ T.takeWhile isDigit t, t)
143143 n <- P decimal
144144 return (n, digits)
145− power <- perhaps 0 (char (`elem` "eE") >> signa (P decimal) :: Parser Int)
145+ let e c = c == 'e' || c == 'E'
146+ power <- perhaps 0 (char e >> signa (P decimal) :: Parser Int)
146147 return $! if fracDigits == 0
147148 then if power == 0
148149 then fromIntegral real