{-# LANGUAGE Safe #-}
module Data.Char.Math.Internal
( _shiftC,
_ordc,
_baseUpperLower,
_baseUpperLowerNum,
_isValidInt,
_withCondition,
_dispatchLatinGreekDigit,
_dispatchLatinGreekDigit',
)
where
import Data.Char (chr, isAsciiUpper, isDigit, ord)
import Data.Char.Core (isAsciiAlpha, isGreek)
_shiftC :: Int -> Char -> Char
_shiftC :: Int -> Char -> Char
_shiftC = (Int -> Char
chr forall b c a. (b -> c) -> (a -> b) -> a -> c
.) forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Int
ord) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Num a => a -> a -> a
(+)
_ordc :: Char -> Int -> Char
_ordc :: Char -> Int -> Char
_ordc = (Int -> Char
chr forall b c a. (b -> c) -> (a -> b) -> a -> c
.) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Num a => a -> a -> a
(+) forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Int
ord
_baseUpperLower :: Int -> Char -> Char
_baseUpperLower :: Int -> Char -> Char
_baseUpperLower Int
b Char
c
| Char -> Bool
isAsciiUpper Char
c = Int -> Char
oc (Int
b forall a. Num a => a -> a -> a
+ Int
6)
| Bool
otherwise = Int -> Char
oc Int
b
where
oc :: Int -> Char
oc = Char -> Int -> Char
_ordc Char
c
_baseUpperLowerNum :: Int -> Int -> Char -> Char
_baseUpperLowerNum :: Int -> Int -> Char -> Char
_baseUpperLowerNum Int
n Int
b Char
c
| Char -> Bool
isDigit Char
c = Int -> Char
oc Int
n
| Char -> Bool
isAsciiUpper Char
c = Int -> Char
oc (Int
b forall a. Num a => a -> a -> a
+ Int
6)
| Bool
otherwise = Int -> Char
oc Int
b
where
oc :: Int -> Char
oc = Char -> Int -> Char
_ordc Char
c
_isValidInt :: Int -> Bool
_isValidInt :: Int -> Bool
_isValidInt Int
x = Int
x forall a. Ord a => a -> a -> Bool
< Int
10 Bool -> Bool -> Bool
&& Int
x forall a. Ord a => a -> a -> Bool
>= Int
0
_withCondition :: (a -> Bool) -> (a -> b) -> a -> Maybe b
_withCondition :: forall a b. (a -> Bool) -> (a -> b) -> a -> Maybe b
_withCondition a -> Bool
p a -> b
f = a -> Maybe b
go
where
go :: a -> Maybe b
go a
x
| a -> Bool
p a
x = forall a. a -> Maybe a
Just (a -> b
f a
x)
| Bool
otherwise = forall a. Maybe a
Nothing
_dispatchLatinGreekDigit' ::
(Char -> Char) ->
(Char -> Char) ->
(Char -> Char) ->
Char ->
Char
_dispatchLatinGreekDigit' :: (Char -> Char) -> (Char -> Char) -> (Char -> Char) -> Char -> Char
_dispatchLatinGreekDigit' Char -> Char
l Char -> Char
g Char -> Char
d Char
c
| Char -> Bool
isDigit Char
c = Char -> Char
d Char
c
| Char -> Bool
isAsciiAlpha Char
c = Char -> Char
l Char
c
| Char -> Bool
isGreek Char
c = Char -> Char
g Char
c
| Bool
otherwise = Char
c
_dispatchLatinGreekDigit ::
(Char -> Char) ->
(Char -> Char) ->
(Char -> Char) ->
Char ->
Maybe Char
_dispatchLatinGreekDigit :: (Char -> Char)
-> (Char -> Char) -> (Char -> Char) -> Char -> Maybe Char
_dispatchLatinGreekDigit Char -> Char
l Char -> Char
g Char -> Char
d Char
c
| Char -> Bool
isDigit Char
c = forall a. a -> Maybe a
Just (Char -> Char
d Char
c)
| Char -> Bool
isAsciiAlpha Char
c = forall a. a -> Maybe a
Just (Char -> Char
l Char
c)
| Char -> Bool
isGreek Char
c = forall a. a -> Maybe a
Just (Char -> Char
g Char
c)
| Bool
otherwise = forall a. Maybe a
Nothing