hydrogen-util 0.5 → 0.6
raw patch · 3 files changed
+77/−2 lines, 3 filesdep ~hydrogen-prelude
Dependency ranges changed: hydrogen-prelude
Files
hydrogen-util.cabal view
@@ -1,5 +1,5 @@ name: hydrogen-util-version: 0.5+version: 0.6 homepage: https://github.com/scravy/hydrogen-util synopsis: Hydrogen Tools license: BSD3@@ -19,10 +19,11 @@ exposed-modules: Hydrogen.Util , Hydrogen.Util.Files , Hydrogen.Util.Parsec+ , Hydrogen.Util.Parsec.Char , Hydrogen.Util.Read build-depends: base ==4.7.* , containers ==0.5.*- , hydrogen-prelude >=0.4.1+ , hydrogen-prelude ==0.6.0.1 , parsec ==3.1.* , time ==1.4.* hs-source-dirs: src
src/Hydrogen/Util/Parsec.hs view
@@ -7,6 +7,7 @@ , Tokens , mkError , sourceToken+ , manyBetween , (>+>) , (<+<) ) where@@ -33,6 +34,10 @@ nextPos p _ = \case ((p', _) : _) -> p' _ -> p++manyBetween :: (Monad m, Stream s m t)+ => ParsecT s u m open -> ParsecT s u m close -> ParsecT s u m p -> ParsecT s u m [p]+manyBetween o c p = o *> manyTill p c (>+>) :: Parser a b -> Parser b c -> Parser a c p1 >+> p2 = join <$> fmap p2 <$> p1
+ src/Hydrogen/Util/Parsec/Char.hs view
@@ -0,0 +1,69 @@+module Hydrogen.Util.Parsec.Char (+ module Hydrogen.Util.Parsec+ , oneOf+ , noneOf+ , spaces+ , space+ , newline+ , tab+ , upper+ , lower+ , alphaNum+ , letter+ , digit+ , hexDigit+ , char+ , anyChar+ , satisfy+ , string+ , number+ , name+ , name_+ , keyword+ , keyword_+ , between'+ ) where++import Hydrogen.Prelude hiding ((<|>), many, optional)+import Hydrogen.Util.Parsec++import Text.Parsec.Char hiding (newline)++-- | @[a-z][a-z0-9]*@+name :: (Monad m, Stream s m Char) => ParsecT s u m String+name = liftA2 (:) letter (many alphaNum)++-- | @[a-z_][a-z0-9_]*@+name_ :: (Monad m, Stream s m Char) => ParsecT s u m String+name_ = liftA2 (:) (letter <|> char '_') (many (alphaNum <|> char '_'))++-- | @keyword w@ parses the string @w@ which must not be followed by any alpha numeric character,+-- i.e. @keyword "as"@ parses "as" but not "ass".+keyword :: (Monad m, Stream s m Char) => String -> ParsecT s u m String+keyword w = string w <* notFollowedBy alphaNum++keyword_ :: (Monad m, Stream s m Char) => String -> ParsecT s u m ()+keyword_ w = const () <$> (string w <* notFollowedBy alphaNum)++between' :: (Monad m, Stream s m Char) => Char -> Char -> ParsecT s u m t -> ParsecT s u m t+between' a b = between (char a) (char b)++-- | Parses a negative or a positive number (indicated by an unary minus operator, does not accept an unary plus).+number :: (Monad m, Stream s m Char, Read a, Num a, Integral a) => ParsecT s u m a+number = negativeNumber <|> positiveNumber++-- | Parses a positive integral number.+positiveNumber :: (Monad m, Stream s m Char, Read a, Num a, Integral a) => ParsecT s u m a+positiveNumber = (read <$> many1 digit)++-- | Parses a negative integral number (indicated by an unary minus operator).+negativeNumber :: (Monad m, Stream s m Char, Read a, Num a, Integral a) => ParsecT s u m a+negativeNumber = negate . read <$> (char '-' >> many1 digit)++-- | Parses end of line, which maybe ('\n' or '\r' or "\r\n").+--+-- Returns the newline character, '\r' in case of "\r\n".+newline :: (Monad m, Stream s m Char) => ParsecT s u m Char+newline = char '\n' <|> (char '\r' <* optional (char '\n'))++