{-# LANGUAGE Safe #-}
module Data.Char.Number.Duodecimal (
char10, char11
, duodecimalDigit, duodecimalDigit'
, duodecimalNumber, duodecimalNumber'
) where
import Data.Bits((.|.))
import Data.Char(chr)
import Data.Char.Core(PlusStyle, positionalNumberSystem)
import Data.Default(def)
import Data.Text(Text)
char10 :: Char
char10 :: Char
char10 = Char
'\x2180'
char11 :: Char
char11 :: Char
char11 = Char
'\x2181'
_duodecimalDigit :: Int -> Char
_duodecimalDigit :: Int -> Char
_duodecimalDigit Int
n
| Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
10 = Int -> Char
chr (Int
0x30 Int -> Int -> Int
forall a. Bits a => a -> a -> a
.|. Int
n)
| Bool
otherwise = Int -> Char
chr (Int
0x2180 Int -> Int -> Int
forall a. Bits a => a -> a -> a
.|. Int
n)
duodecimalDigit' :: Integral i
=> i
-> Char
duodecimalDigit' :: i -> Char
duodecimalDigit' = Int -> Char
_duodecimalDigit (Int -> Char) -> (i -> Int) -> i -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
. i -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral
duodecimalDigit :: Integral i => i -> Maybe Char
duodecimalDigit :: i -> Maybe Char
duodecimalDigit i
n
| i
n i -> i -> Bool
forall a. Ord a => a -> a -> Bool
>= i
0 Bool -> Bool -> Bool
&& i
n i -> i -> Bool
forall a. Ord a => a -> a -> Bool
< i
12 = Char -> Maybe Char
forall a. a -> Maybe a
Just (i -> Char
forall i. Integral i => i -> Char
duodecimalDigit' i
n)
| Bool
otherwise = Maybe Char
forall a. Maybe a
Nothing
duodecimalNumber :: Integral i
=> PlusStyle
-> i
-> Text
duodecimalNumber :: PlusStyle -> i -> Text
duodecimalNumber = i -> (Int -> Char) -> Char -> Char -> PlusStyle -> i -> Text
forall i.
Integral i =>
i -> (Int -> Char) -> Char -> Char -> PlusStyle -> i -> Text
positionalNumberSystem i
12 Int -> Char
_duodecimalDigit Char
'+' Char
'-'
duodecimalNumber' :: Integral i
=> i
-> Text
duodecimalNumber' :: i -> Text
duodecimalNumber' = PlusStyle -> i -> Text
forall i. Integral i => PlusStyle -> i -> Text
duodecimalNumber PlusStyle
forall a. Default a => a
def