module Text.ParserCombinators.PArrow.CharSet where
import Data.Char
data CharSet = CS_Any
| CS_Word
| CS_Whitespace
| CS_Digit
| CS_Alpha
| CS_Alnum
| CS_Ascii
| CS_Lower
| CS_Upper
deriving(Eq)
instance Show CharSet where
show CS_Any = "."
show CS_Word = "\\w"
show CS_Whitespace = "\\s"
show CS_Digit = "\\d"
show CS_Alpha = "{alpha}"
show CS_Alnum = "{alnum}"
show CS_Ascii = "{ascii}"
show CS_Lower = "{lower}"
show CS_Upper = "{upper}"
csetValue :: CharSet -> [Char]
csetValue CS_Any = fmap chr [0..255]
csetValue CS_Word = ('_':csetValue CS_Alnum)
csetValue CS_Whitespace = " \t\r\n"
csetValue CS_Digit = "0123456789"
csetValue CS_Ascii = fmap chr [0..127]
csetValue CS_Alpha = filter isAlpha $ csetValue CS_Any
csetValue CS_Alnum = csetValue CS_Digit ++ csetValue CS_Alpha
csetValue CS_Lower = filter isLower $ csetValue CS_Alpha
csetValue CS_Upper = filter isUpper $ csetValue CS_Alpha