module Text.Derp.Char
( oneOf, spaces, space, newline, tab
, upper, lower, alphaNum, digit, hexDigit, octDigit
, char, satisfy, string
) where
import Text.Derp
import Text.Derp.Combinator
import Data.Char
token c = Token [c] [c]
oneOf :: [Char] -> Parser Char
oneOf s = foldr1 (<|>) (map char s)
spaces :: Parser ()
spaces = skipMany space
space, newline, tab :: Parser Char
space = satisfy isSpace
newline = char '\n'
tab = char '\t'
upper, lower, alphaNum, letter, digit, hexDigit, octDigit :: Parser Char
upper = satisfy isUpper
lower = satisfy isLower
alphaNum = satisfy isAlphaNum
letter = satisfy isLetter
digit = satisfy isDigit
hexDigit = satisfy isHexDigit
octDigit = satisfy isOctDigit
char :: Char -> Parser Char
char c = ter [c] ==> head
satisfy :: (Char -> Bool) -> Parser Char
satisfy f = oneOf (filter f [minBound .. maxBound])
string :: String -> Parser String
string s = foldr (\pc pcs -> pc <~> pcs ==> uncurry (:)) (eps []) (map char s)