regex-applicative-0.3: Text/Regex/Applicative/Common.hs
-- |
-- Collection of commonly used regular expressions.
module Text.Regex.Applicative.Common (
-- * Digits
digit
, hexDigit
-- * Numbers
, signed
, decimal
, hexadecimal
) where
import Data.Char
import Text.Regex.Applicative
-- | Decimal digit, i.e. @\'0\'@..@\'9\'@
digit :: Num a => RE Char a
digit = fromIntegral . digitToInt <$> psym isDigit
-- | Hexadecimal digit
-- i.e. @\'0\'@..@\'9\'@, @\'a\'@..@\'f\'@, @\'A\'@..@\'F\'@.
hexDigit :: Num a => RE Char a
hexDigit = fromIntegral . digitToInt <$> psym isHexDigit
-- | Add optional sign
signed :: Num a => RE Char a -> RE Char a
signed p = sign <*> p
where
sign = id <$ sym '+'
<|> negate <$ sym '-'
<|> pure id
-- | Parse decimal number without sign.
decimal :: Num a => RE Char a
decimal = foldl (\d i -> d*10 + i) 0 <$> some digit
-- | Parse decimal number without sign.
hexadecimal :: Num a => RE Char a
hexadecimal = foldl (\d i -> d*16 + i) 0 <$> some hexDigit