-{-# OPTIONS -fno-implicit-prelude #-}
+{-# OPTIONS_GHC -fno-implicit-prelude #-}
-----------------------------------------------------------------------------
---
+-- |
-- Module : Data.Char
-- Copyright : (c) The University of Glasgow 2001
--- License : BSD-style (see the file libraries/core/LICENSE)
+-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : libraries@haskell.org
--- Stability : provisional
+-- Stability : stable
-- Portability : portable
--
--- $Id: Char.hs,v 1.1 2001/06/28 14:15:02 simonmar Exp $
---
-- The Char type and associated operations.
--
-----------------------------------------------------------------------------
(
Char
- , isAscii, isLatin1, isControl
- , isPrint, isSpace, isUpper
- , isLower, isAlpha, isDigit
- , isOctDigit, isHexDigit, isAlphaNum -- :: Char -> Bool
+ , String
+
+ -- * Character classification
+ -- | Unicode characters are divided into letters, numbers, marks,
+ -- punctuation, symbols, separators (including spaces) and others
+ -- (including control characters).
+ -- The full set of Unicode character attributes is not accessible
+ -- in this library.
+ , isAscii, isLatin1, isControl, isSpace
+ , isLower, isUpper, isAlpha, isAlphaNum, isPrint
+ , isDigit, isOctDigit, isHexDigit -- :: Char -> Bool
+ -- * Case conversion
, toUpper, toLower -- :: Char -> Char
+ -- * Single digit characters
, digitToInt -- :: Char -> Int
, intToDigit -- :: Int -> Char
+ -- * Numeric representations
, ord -- :: Char -> Int
, chr -- :: Int -> Char
- , readLitChar -- :: ReadS Char
+
+ -- * String representations
, showLitChar -- :: Char -> ShowS
, lexLitChar -- :: ReadS String
-
- , String
+ , readLitChar -- :: ReadS Char
-- Implementation checked wrt. Haskell 98 lib report, 1/99.
) where
#ifdef __GLASGOW_HASKELL__
import GHC.Base
import GHC.Show
-import GHC.Read (readLitChar, lexLitChar, digitToInt)
+import GHC.Read (readLitChar, lexLitChar)
+import GHC.Unicode
+import GHC.Num
#endif
#ifdef __HUGS__
-isLatin1 c = True
+import Hugs.Char
#endif
+
+#ifdef __NHC__
+import Prelude
+import Prelude(Char,String)
+import Char
+#endif
+
+-- | Convert a single digit 'Char' to the corresponding 'Int'.
+-- This function fails unless its argument satisfies 'isHexDigit',
+-- but recognises both upper and lower-case hexadecimal digits
+-- (i.e. @\'0\'@..@\'9\'@, @\'a\'@..@\'f\'@, @\'A\'@..@\'F\'@).
+digitToInt :: Char -> Int
+digitToInt c
+ | isDigit c = ord c - ord '0'
+ | c >= 'a' && c <= 'f' = ord c - ord 'a' + 10
+ | c >= 'A' && c <= 'F' = ord c - ord 'A' + 10
+ | otherwise = error ("Char.digitToInt: not a digit " ++ show c) -- sigh