module Data.Char.Small where

{- | non-total function -}
superscript :: Char -> Char
superscript :: Char -> Char
superscript =
   Char -> (Char -> Char) -> Maybe Char -> Char
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Char] -> Char
forall a. HasCallStack => [Char] -> a
error [Char]
"no superscript character available") Char -> Char
forall a. a -> a
id (Maybe Char -> Char) -> (Char -> Maybe Char) -> Char -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   Char -> Maybe Char
superscriptMaybe

superscriptMaybe :: Char -> Maybe Char
superscriptMaybe :: Char -> Maybe Char
superscriptMaybe Char
c =
   case Char
c of
      Char
'0' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2070'
      Char
'1' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\xb9'
      Char
'2' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\xb2'
      Char
'3' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\xb3'
      Char
'4' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2074'
      Char
'5' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2075'
      Char
'6' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2076'
      Char
'7' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2077'
      Char
'8' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2078'
      Char
'9' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2079'

      Char
'+' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x207A'
      Char
'-' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x207B'
      Char
'=' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x207C'
      Char
'(' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x207D'
      Char
')' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x207E'

      Char
'i' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2071'
      Char
'n' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x207F'

      Char
_ -> Maybe Char
forall a. Maybe a
Nothing


{- | non-total function -}
subscript :: Char -> Char
subscript :: Char -> Char
subscript =
   Char -> (Char -> Char) -> Maybe Char -> Char
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Char] -> Char
forall a. HasCallStack => [Char] -> a
error [Char]
"no subscript character available") Char -> Char
forall a. a -> a
id (Maybe Char -> Char) -> (Char -> Maybe Char) -> Char -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   Char -> Maybe Char
subscriptMaybe

subscriptMaybe :: Char -> Maybe Char
subscriptMaybe :: Char -> Maybe Char
subscriptMaybe Char
c =
   case Char
c of
      Char
'0' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2080'
      Char
'1' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2081'
      Char
'2' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2082'
      Char
'3' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2083'
      Char
'4' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2084'
      Char
'5' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2085'
      Char
'6' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2086'
      Char
'7' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2087'
      Char
'8' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2088'
      Char
'9' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2089'

      Char
'+' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x208A'
      Char
'-' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x208B'
      Char
'=' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x208C'
      Char
'(' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x208D'
      Char
')' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x208E'

      Char
'a' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2090'
      Char
'e' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2091'
      Char
'o' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2092'
      Char
'x' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2093'

      Char
'h' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2095'
      Char
'k' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2096'
      Char
'l' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2097'
      Char
'm' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2098'
      Char
'n' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x2099'
      Char
'p' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x209A'
      Char
's' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x209B'
      Char
't' -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'\x209C'

      Char
_ -> Maybe Char
forall a. Maybe a
Nothing