module GHC.Lexeme (
startsVarSym, startsVarId, startsConSym, startsConId,
startsVarSymASCII, isVarSymChar, okSymChar
) where
import Data.Char
okSymChar :: Char -> Bool
okSymChar c
| c `elem` "(),;[]`{}_\"'"
= False
| otherwise
= case generalCategory c of
ConnectorPunctuation -> True
DashPunctuation -> True
OtherPunctuation -> True
MathSymbol -> True
CurrencySymbol -> True
ModifierSymbol -> True
OtherSymbol -> True
_ -> False
startsVarSym, startsVarId, startsConSym, startsConId :: Char -> Bool
startsVarSym c = okSymChar c&& c /= ':'
startsConSym c = c == ':'
startsVarId c = c == '_' || case generalCategory c of
LowercaseLetter -> True
OtherLetter -> True
_ -> False
startsConId c = isUpper c || c == '('
startsVarSymASCII :: Char -> Bool
startsVarSymASCII c = c `elem` "!#$%&*+./<=>?@\\^|~-"
isVarSymChar :: Char -> Bool
isVarSymChar c = c == ':' || startsVarSym c