module ASCII.Predicates
(
isControl, isPrint,
isLower, isUpper,
isLetter, isAlpha,
isDigit, isOctDigit, isHexDigit, isNumber,
isSpace, isAlphaNum, isMark, isPunctuation, isSymbol, isSeparator
)
where
import ASCII.Char ( Char (..) )
import Data.Bool ( Bool (..), otherwise )
import Data.Eq ( (==) )
import Data.Function ( (.) )
import Data.Ord ( (<), (<=), (>=) )
import qualified ASCII.Char as Char
import qualified Data.Bool as Bool
import qualified Data.List as List
isControl :: Char -> Bool
isControl :: Char -> Bool
isControl Char
x =
case Char
x of
Char
_ | (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
< Char
Char.Space) -> Bool
True
Char
Char.Delete -> Bool
True
Char
_ -> Bool
False
isPrint :: Char -> Bool
isPrint :: Char -> Bool
isPrint = Bool -> Bool
Bool.not (Bool -> Bool) -> (Char -> Bool) -> Char -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Bool
isControl
isLower :: Char -> Bool
isLower :: Char -> Bool
isLower Char
x = Bool -> Bool -> Bool
(Bool.&&) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
SmallLetterA) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
SmallLetterZ)
isUpper :: Char -> Bool
isUpper :: Char -> Bool
isUpper Char
x = Bool -> Bool -> Bool
(Bool.&&) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
CapitalLetterA) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
CapitalLetterZ)
isLetter :: Char -> Bool
isLetter :: Char -> Bool
isLetter Char
x = Bool -> Bool -> Bool
(Bool.||) (Char -> Bool
isLower Char
x) (Char -> Bool
isUpper Char
x)
isAlpha :: Char -> Bool
isAlpha :: Char -> Bool
isAlpha = Char -> Bool
isLetter
isDigit :: Char -> Bool
isDigit :: Char -> Bool
isDigit Char
x = Bool -> Bool -> Bool
(Bool.&&) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
Digit0) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
Digit9)
isOctDigit :: Char -> Bool
isOctDigit :: Char -> Bool
isOctDigit Char
x = Bool -> Bool -> Bool
(Bool.&&) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
Digit0) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
Digit7)
isHexDigit :: Char -> Bool
isHexDigit :: Char -> Bool
isHexDigit Char
x | Char -> Bool
isDigit Char
x = Bool
True
| Bool -> Bool -> Bool
(Bool.&&) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
CapitalLetterA) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
CapitalLetterF) = Bool
True
| Bool -> Bool -> Bool
(Bool.&&) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
SmallLetterA) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
SmallLetterF) = Bool
True
| Bool
otherwise = Bool
False
isNumber :: Char -> Bool
isNumber :: Char -> Bool
isNumber = Char -> Bool
isDigit
isSpace :: Char -> Bool
isSpace :: Char -> Bool
isSpace Char
Space = Bool
True
isSpace Char
x = Bool -> Bool -> Bool
(Bool.&&) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
HorizontalTab) (Char
x Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
CarriageReturn)
isAlphaNum :: Char -> Bool
isAlphaNum :: Char -> Bool
isAlphaNum Char
x = Bool -> Bool -> Bool
(Bool.||) (Char -> Bool
isAlpha Char
x) (Char -> Bool
isDigit Char
x)
isMark :: Char -> Bool
isMark :: Char -> Bool
isMark Char
_ = Bool
False
isPunctuation :: Char -> Bool
isPunctuation :: Char -> Bool
isPunctuation = (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`List.elem` [Char
ExclamationMark, Char
QuotationMark, Char
NumberSign, Char
PercentSign, Char
Ampersand, Char
Apostrophe, Char
LeftParenthesis, Char
RightParenthesis, Char
Asterisk, Char
Comma, Char
HyphenMinus, Char
FullStop, Char
Slash, Char
Colon, Char
Semicolon, Char
QuestionMark, Char
AtSign, Char
LeftSquareBracket, Char
Backslash, Char
RightSquareBracket, Char
Underscore, Char
LeftCurlyBracket, Char
RightCurlyBracket])
isSymbol :: Char -> Bool
isSymbol :: Char -> Bool
isSymbol = (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`List.elem` [Char
DollarSign, Char
PlusSign, Char
LessThanSign, Char
EqualsSign, Char
GreaterThanSign, Char
Caret, Char
GraveAccent, Char
VerticalLine, Char
Tilde])
isSeparator :: Char -> Bool
isSeparator :: Char -> Bool
isSeparator = (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
Space)