packages feed

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'))++