packages feed

parsers 0.3 → 0.3.2

raw patch · 3 files changed

+28/−28 lines, 3 files

Files

Text/Parser/Expression.hs view
@@ -108,11 +108,13 @@               ambigiousLeft     = ambigious "left" lassocOp               ambigiousNon      = ambigious "non" nassocOp -              termP      = do{ pre  <- prefixP-                             ; x    <- term-                             ; post <- postfixP-                             ; return (post (pre x))-                             }+              preTermP   =     do { pre <- prefixP; x <- term; return $ pre x }+                           <|> term++              termP      = do { x <- preTermP+                              ; post <- postfixP+                              ; return (post x)+                              }                postfixP   = postfixOp <|> return id 
Text/Parser/Token.hs view
@@ -141,7 +141,7 @@ -- specified in 'decimal', 'hexadecimal' or -- 'octal'. The number is parsed according to the grammar -- rules in the Haskell report.-natural :: (TokenParsing m, Monad m) => m Integer+natural :: TokenParsing m => m Integer natural = token natural' {-# INLINE natural #-} @@ -151,7 +151,7 @@ -- number can be specified in 'decimal', 'hexadecimal' -- or 'octal'. The number is parsed according -- to the grammar rules in the Haskell report.-integer :: (TokenParsing m, Monad m) => m Integer+integer :: TokenParsing m => m Integer integer = token (token (highlight Operator sgn <*> natural')) <?> "integer"   where   sgn = negate <$ char '-'@@ -162,7 +162,7 @@ -- | This token parser parses a floating point value. Returns the value -- of the number. The number is parsed according to the grammar rules -- defined in the Haskell report.-double :: (TokenParsing m, Monad m) => m Double+double :: TokenParsing m => m Double double = token (highlight Number floating <?> "double") {-# INLINE double #-} @@ -170,7 +170,7 @@ -- Returns the value of the number. This parsers deals with -- any overlap in the grammar rules for naturals and floats. The number -- is parsed according to the grammar rules defined in the Haskell report.-naturalOrDouble :: (TokenParsing m, Monad m) => m (Either Integer Double)+naturalOrDouble :: TokenParsing m => m (Either Integer Double) naturalOrDouble = token (highlight Number natDouble <?> "number") {-# INLINE naturalOrDouble #-} @@ -421,7 +421,7 @@ -- rules in the Haskell report. -- -- This parser does NOT swallow trailing whitespace.-natural' :: (TokenParsing m, Monad m) => m Integer+natural' :: TokenParsing m => m Integer natural' = highlight Number nat <?> "natural"  number :: TokenParsing m => Integer -> m Char -> m Integer@@ -440,7 +440,7 @@ -- Also, unlike the 'integer' parser, this parser does not admit spaces -- between the sign and the number. -integer' :: (TokenParsing m, Monad m) => m Integer+integer' :: TokenParsing m => m Integer integer' = int <?> "integer" {-# INLINE integer' #-} @@ -450,19 +450,19 @@    <|> id <$ char '+'    <|> pure id -int :: (TokenParsing m, Monad m) => m Integer+int :: TokenParsing m => m Integer int = {-token-} sign <*> highlight Number nat-nat, zeroNumber :: (TokenParsing m, Monad m) => m Integer+nat, zeroNumber :: TokenParsing m => m Integer nat = zeroNumber <|> decimal-zeroNumber = char '0' *> (hexadecimal <|> octal <|> decimal <|> return 0) <?> ""+zeroNumber = char '0' *> (hexadecimal <|> octal <|> decimal <|> pure 0) <?> "" -floating :: (TokenParsing m, Monad m) => m Double-floating = decimal >>= fractExponent+floating :: TokenParsing m => m Double+floating = decimal <**> fractExponent {-# INLINE floating #-} -fractExponent :: TokenParsing m => Integer -> m Double-fractExponent n = (\fract expo -> (fromInteger n + fract) * expo) <$> fraction <*> option 1.0 exponent'-              <|> (fromInteger n *) <$> exponent' where+fractExponent :: TokenParsing m => m (Integer -> Double)+fractExponent = (\fract expo n -> (fromInteger n + fract) * expo) <$> fraction <*> option 1.0 exponent'+            <|> (\expo n -> fromInteger n * expo) <$> exponent' where   fraction = Prelude.foldr op 0.0 <$> (char '.' *> (some digit <?> "fraction"))   op d f = (f + fromIntegral (digitToInt d))/10.0   exponent' = ((\f e -> power (f e)) <$ oneOf "eE" <*> sign <*> (decimal <?> "exponent")) <?> "exponent"@@ -470,21 +470,19 @@     | e < 0     = 1.0/power(-e)     | otherwise = fromInteger (10^e) -natDouble, zeroNumFloat, decimalFloat :: (TokenParsing m, Monad m) => m (Either Integer Double)+natDouble, zeroNumFloat, decimalFloat :: TokenParsing m => m (Either Integer Double) natDouble     = char '0' *> zeroNumFloat   <|> decimalFloat zeroNumFloat     = Left <$> (hexadecimal <|> octal)   <|> decimalFloat-  <|> fractFloat 0-  <|> return (Left 0)-decimalFloat = do-  n <- decimal-  option (Left n) (fractFloat n)+  <|> pure 0 <**> fractFloat+  <|> pure (Left 0)+decimalFloat = decimal <**> option Left (try fractFloat) -fractFloat :: TokenParsing m => Integer -> m (Either Integer Double)-fractFloat n = Right <$> fractExponent n+fractFloat :: TokenParsing m => m (Integer -> Either Integer Double)+fractFloat = (Right .) <$> fractExponent {-# INLINE fractFloat #-}  -- | Parses a positive whole number in the decimal system. Returns the
parsers.cabal view
@@ -1,6 +1,6 @@ name:          parsers category:      Text, Parsing-version:       0.3+version:       0.3.2 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE