[project @ 1997-03-14 05:22:26 by sof]
[ghc-hetmet.git] / ghc / lib / required / Char.lhs
index c58750a..b95487a 100644 (file)
@@ -7,15 +7,44 @@
 \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}