pattern_guard_list_comprehension_footnote
[haskell-report.git] / report / char.verb
1 %**<title>The Haskell 98 Library Report: Character Utilities</title>
2 %**~header
3 \section{Character Utilities}
4
5 \outline{
6 \inputHS{lib-hdrs/Char}
7 }
8 \indextt{isAscii}
9 \indextt{isLatin1}
10 \indextt{isControl}
11 \indextt{isPrint}
12 \indextt{isSpace}
13 \indextt{isUpper}
14 \indextt{isLower}
15 \indextt{isAlpha}
16 \indextt{isDigit}
17 \indextt{isOctDigit}
18 \indextt{isHexDigit}
19 \indextt{isAlphaNum}
20 \indextt{toUpper}
21 \indextt{toLower}
22
23 This library provides a limited set of operations on the Unicode
24 character set.  
25 The first 128 entries of this character set are identical to the
26 ASCII set; with the next 128 entries comes the remainder of the
27 Latin-1 character set.
28 This module offers only a limited view of the
29 full Unicode character set; the full set of Unicode character
30 attributes is not accessible in this library.
31
32 Unicode characters may be divided into five general categories:
33 non-printing, lower case alphabetic, other alphabetic, numeric digits, and
34 other printable characters.  For the purposes of Haskell, any
35 alphabetic character which is not lower case is treated as upper case
36 (Unicode actually has three cases: upper, lower, and title).  Numeric
37 digits may be part of identifiers but digits outside the ASCII range are not
38 used by the reader to represent numbers.  
39
40 For each sort of Unicode character, here are the predicates which
41 return @True@:
42 \begin{center}
43 \begin{tabular}{|l|llll|}
44 \hline
45 Character Type & Predicates  & & & \\
46 \hline
47 Lower Case Alphabetic & @isPrint@ & @isAlphaNum@ & @isAlpha@ & @isLower@ \\
48 Other Alphabetic & @isPrint@ & @isAlphaNum@ & @isAlpha@ & @isUpper@ \\
49 Digits & @isPrint@ & @isAlphaNum@ & & \\
50 Other Printable & @isPrint@ & & & \\
51 Non-printing & & & &\\
52 \hline
53 \end{tabular}
54 \end{center}
55
56 The @isDigit@, @isOctDigit@, and @isHexDigit@ functions select only
57 ASCII characters.  @intToDigit@ and @digitToInt@ convert between 
58 a single digit @Char@ and the corresponding @Int@.  
59 @digitToInt@ operates fails unless its argument satisfies @isHexDigit@,
60 but recognises both upper and lower-case hexadecimal digits (i.e. @'0'@..@'9'@,
61 @'a'@..@'f'@, @'A'@..@'F'@).  @intToDigit@ fails unless its argument is in the range
62 @0@..@15@, and generates lower-case hexadecimal digits.
63
64 The @isSpace@ function recognizes only white characters in the Latin-1
65 range.
66
67 The function @showLitChar@ converts a character to a string using
68 only printable characters, using Haskell source-language escape conventions.
69 The function @lexLitChar@ does the reverse, returning the sequence of characters 
70 that encode the character.
71 The function @readLitChar@ does the same, but in addition converts the 
72 to the character that it encodes.  For example:
73 \bprog
74 @
75   showLitChar '\n' s       =  "\\n" ++ s
76   lexLitChar  "\\nHello"   =  [("\\n", "Hello")]
77   readLitChar "\\nHello"   =  [('\n', "Hello")]
78 @
79 \eprog
80
81 Function @toUpper@ converts a letter to the corresponding
82 upper-case letter, leaving any other character unchanged.  Any
83 Unicode letter which has an upper-case equivalent is transformed.
84 Similarly, @toLower@ converts a letter to the
85 corresponding lower-case letter, leaving any other character
86 unchanged.
87
88 The @ord@ and @chr@ functions are @fromEnum@ and @toEnum@
89 restricted to the type @Char@.
90
91 \clearpage
92 \subsection{Library {\tt Char}}
93 \label{Char}
94 \inputHS{lib-code/Char}
95
96 %**~footer
97
98