module Text.ParserCombinators.Parsec.Char
( CharParser
, alphaNum
, anyChar
, char
, digit
, hexDigit
, letter
, lower
, newline
, noneOf
, octDigit
, oneOf
, satisfy
, space
, spaces
, string
, tab
, upper
) where
import Data.Char
import Text.ParserCombinators.Parsec.Pos (updatePosChar, updatePosString)
import Text.ParserCombinators.Parsec.Prim
type CharParser st a = GenParser Char st a
oneOf :: [Char] -> CharParser st Char
oneOf :: [Char] -> CharParser st Char
oneOf [Char]
cs = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Char]
cs)
noneOf :: [Char] -> CharParser st Char
noneOf :: [Char] -> CharParser st Char
noneOf [Char]
cs = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char]
cs)
spaces :: CharParser st ()
spaces :: CharParser st ()
spaces = GenParser Char st Char -> CharParser st ()
forall tok st a. GenParser tok st a -> GenParser tok st ()
skipMany GenParser Char st Char
forall st. CharParser st Char
space CharParser st () -> [Char] -> CharParser st ()
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"white space"
space :: CharParser st Char
space :: CharParser st Char
space = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isSpace CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"space"
newline :: CharParser st Char
newline :: CharParser st Char
newline = Char -> CharParser st Char
forall st. Char -> CharParser st Char
char Char
'\n' CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"new-line"
tab :: CharParser st Char
tab :: CharParser st Char
tab = Char -> CharParser st Char
forall st. Char -> CharParser st Char
char Char
'\t' CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"tab"
upper :: CharParser st Char
upper :: CharParser st Char
upper = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isUpper CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"uppercase letter"
lower :: CharParser st Char
lower :: CharParser st Char
lower = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isLower CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"lowercase letter"
alphaNum :: CharParser st Char
alphaNum :: CharParser st Char
alphaNum = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isAlphaNum CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"letter or digit"
letter :: CharParser st Char
letter :: CharParser st Char
letter = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isAlpha CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"letter"
digit :: CharParser st Char
digit :: CharParser st Char
digit = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isDigit CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"digit"
hexDigit :: CharParser st Char
hexDigit :: CharParser st Char
hexDigit = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isHexDigit CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"hexadecimal digit"
octDigit :: CharParser st Char
octDigit :: CharParser st Char
octDigit = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
isOctDigit CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char]
"octal digit"
char :: Char -> CharParser st Char
char :: Char -> CharParser st Char
char Char
c = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
c) CharParser st Char -> [Char] -> CharParser st Char
forall tok st a. GenParser tok st a -> [Char] -> GenParser tok st a
<?> [Char] -> [Char]
forall a. Show a => a -> [Char]
show [Char
c]
anyChar :: CharParser st Char
anyChar :: CharParser st Char
anyChar = (Char -> Bool) -> CharParser st Char
forall st. (Char -> Bool) -> CharParser st Char
satisfy (Bool -> Char -> Bool
forall a b. a -> b -> a
const Bool
True)
satisfy :: (Char -> Bool) -> CharParser st Char
satisfy :: (Char -> Bool) -> CharParser st Char
satisfy Char -> Bool
f = (Char -> [Char])
-> (SourcePos -> Char -> [Char] -> SourcePos)
-> (Char -> Maybe Char)
-> CharParser st Char
forall tok a st.
(tok -> [Char])
-> (SourcePos -> tok -> [tok] -> SourcePos)
-> (tok -> Maybe a)
-> GenParser tok st a
tokenPrim (\ Char
c -> [Char] -> [Char]
forall a. Show a => a -> [Char]
show [Char
c])
(\ SourcePos
pos Char
c [Char]
_ -> SourcePos -> Char -> SourcePos
updatePosChar SourcePos
pos Char
c)
(\ Char
c -> if Char -> Bool
f Char
c then Char -> Maybe Char
forall a. a -> Maybe a
Just Char
c else Maybe Char
forall a. Maybe a
Nothing)
string :: String -> CharParser st String
string :: [Char] -> CharParser st [Char]
string = ([Char] -> [Char])
-> (SourcePos -> [Char] -> SourcePos)
-> [Char]
-> CharParser st [Char]
forall tok st.
Eq tok =>
([tok] -> [Char])
-> (SourcePos -> [tok] -> SourcePos)
-> [tok]
-> GenParser tok st [tok]
tokens [Char] -> [Char]
forall a. Show a => a -> [Char]
show SourcePos -> [Char] -> SourcePos
updatePosString