\begin{code}
{-# OPTIONS -fno-implicit-prelude #-}
-module Char (
- isAscii, isControl, isPrint, isSpace, isUpper, isLower,
- isAlpha, isDigit, isOctDigit, isHexDigit, isAlphanum, toUpper, toLower
- ) where
+module Char
+ (
+ isAscii, isLatin1, isControl,
+ isPrint, isSpace, isUpper,
+ isLower, isAlpha, isDigit,
+ isOctDigit, isHexDigit, isAlphanum, -- :: Char -> Bool
+
+ toUpper, toLower, -- :: Char -> Char
+
+ digitToInt, -- :: Char -> Int
+ intToDigit, -- :: Int -> Char
+
+ ord, -- :: Char -> Int
+ chr, -- :: Int -> Char
+ readLitChar, -- :: ReadS Char
+ showLitChar -- :: Char -> ShowS
+ ) where
import PrelBase
-\end{code}
+import PrelRead (readLitChar)
+import IOBase (error)
+\end{code}
+\begin{code}
+-- Digit conversion operations
+digitToInt :: Char -> Int
+digitToInt c
+ | isDigit c = fromEnum c - fromEnum '0'
+ | c >= 'a' && c <= 'f' = fromEnum c - fromEnum 'a' + 10
+ | c >= 'A' && c <= 'F' = fromEnum c - fromEnum 'A' + 10
+ | otherwise = error "Char.digitToInt: not a digit" -- sigh
+intToDigit :: Int -> Char
+intToDigit i
+ | i >= 0 && i <= 9 = toEnum (fromEnum '0' + i)
+ | i >= 10 && i <= 15 = toEnum (fromEnum 'a' + i -10)
+ | otherwise = error "Char.intToDigit: not a digit" -- ....
+\end{code}