File: char.html

package info (click to toggle)
hugs 1.4.199801-1
  • links: PTS
  • area: non-free
  • in suites: slink
  • size: 7,220 kB
  • ctags: 5,609
  • sloc: ansic: 32,083; haskell: 12,143; yacc: 949; perl: 823; sh: 602; makefile: 236
file content (222 lines) | stat: -rw-r--r-- 20,505 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222

<title>The Haskell 1.3 Library Report: Character Utilities</title>
<body bgcolor="#ffffff"> <i>The Haskell 1.4 Library Report</i><br> <a href="index.html">top</a> | <a href="maybe.html">back</a> | <a href="monad.html">next</a> | <a href="libindex.html">contents</a> <br><hr>
<a name="sect9"></a>
<h2>9<tt>&nbsp;&nbsp;</tt>Character Utilities</h2><p>
<table border=2 cellpadding=3>
<tr><td>
<tt><br>
module&nbsp;Char&nbsp;(&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;isAscii,&nbsp;isLatin1,&nbsp;isControl,&nbsp;isPrint,&nbsp;isSpace,&nbsp;isUpper,&nbsp;isLower,&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;isAlpha,&nbsp;isDigit,&nbsp;isOctDigit,&nbsp;isHexDigit,&nbsp;isAlphanum,&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;digitToInt,&nbsp;intToDigit,<br>
&nbsp;&nbsp;&nbsp;&nbsp;toUpper,&nbsp;toLower,<br>
&nbsp;&nbsp;&nbsp;&nbsp;ord,&nbsp;chr,<br>
&nbsp;&nbsp;&nbsp;&nbsp;readLitChar,&nbsp;showLitChar<br>
&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;where<br>
<br>
isAscii,&nbsp;isLatin1,&nbsp;isControl,&nbsp;isPrint,&nbsp;isSpace,&nbsp;isUpper,&nbsp;isLower,&nbsp;<br>
&nbsp;isAlpha,&nbsp;isDigit,&nbsp;isOctDigit,&nbsp;isHexDigit,&nbsp;isAlphanum&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Bool<br>
<br>
toUpper,&nbsp;toLower&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Char<br>
<br>
digitToInt&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Int<br>
intToDigit&nbsp;::&nbsp;Int&nbsp;-&gt;&nbsp;Char<br>
<br>
ord&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Int<br>
chr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Int&nbsp;&nbsp;-&gt;&nbsp;Char<br>
<br>
readLitChar&nbsp;::&nbsp;Reads&nbsp;Char<br>
showLitChar&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;ShowS<br>

</tt></td></tr></table>
<p>
This library provides a limited set of operations on the Unicode
character set.  The first 128 entries of this character set are
identical to the ASCII set; with the next 128 entries comes the
Latin-1 character set.  This module offers only a limited view of the
full Unicode character set; the full set of Unicode character
attributes is not accessible in this library.<p>
Unicode characters may be divided into five general categories:
non-printing, lower case alphabetic, other alphabetic, numeric digits, and
other printable characters.  For the purposes of Haskell, any
alphabetic character which is not lower case is treated as upper case
(Unicode actually has three cases: upper, lower, and title).  Numeric
digits may be part of identifiers but digits outside the ASCII range are not
used by the reader to represent numbers.  <p>
For each sort of Unicode character, here are the predicates which
return <tt>True</tt>:<br>
<table >
<tr><td>Character Type </td><td> Predicates </td></tr><tr><td>Lower Case     </td><td> <tt>isPrint</tt> </td><td> <tt>isAlphaNum</tt> </td><td> <tt>isAlpha</tt> </td><td> <tt>isLower</tt> </td></tr><tr><td>Other Alphabetic </td><td> <tt>isPrint</tt> </td><td> <tt>isAlphaNum</tt> </td><td> <tt>isAlpha</tt> </td><td> </td><td> <tt>isUpper</tt> </td></tr><tr><td>Digits </td><td> <tt>isPrint</tt> </td><td> <tt>isAlphaNum</tt> </td></tr><tr><td>Other Printable </td><td> <tt>isPrint</tt> </td></tr><tr><td>Non-printing </td><td> </td></tr></table>
<p>
The <tt>isDigit</tt>, <tt>isOctDigit</tt>, and <tt>isHexDigit</tt> functions select only
ASCII characters; <tt>intToDigit</tt> and <tt>digitToInt</tt> operate only for
characters satisfying these predicates.  <p>
The <tt>isSpace</tt> function recognizes only white characters in the Latin-1
range.<p>
The <tt>readLitChar</tt> and <tt>showLitChar</tt> functions leave characters
outside the Latin-1 range unchanged. <p>
Function <tt>toUpper</tt> converts a letter to the corresponding
upper-case letter, leaving any other character unchanged.  Any
Unicode letter which has an upper-case equivalent is transformed.
Similarly, <tt>toLower</tt> converts a letter to the
corresponding lower-case letter, leaving any other character
unchanged.<p>
The <tt>ord</tt> and <tt>chr</tt> functions are <tt>fromEnum</tt> and <tt>toEnum
</tt>restricted to the type <tt>Char</tt>.<a name="Char"></a><p>

<a name="sect9.1"></a>
<h3>9.1<tt>&nbsp;&nbsp;</tt>Library <tt>Char</tt></h3>

<tt><br>
module&nbsp;Char&nbsp;(&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;isAscii,&nbsp;isLatin1,&nbsp;isControl,&nbsp;isPrint,&nbsp;isSpace,&nbsp;isUpper,&nbsp;isLower,<br>
&nbsp;&nbsp;&nbsp;&nbsp;isAlpha,&nbsp;isDigit,&nbsp;isOctDigit,&nbsp;isHexDigit,&nbsp;isAlphanum,<br>
&nbsp;&nbsp;&nbsp;&nbsp;digitToInt,&nbsp;intToDigit,<br>
&nbsp;&nbsp;&nbsp;&nbsp;toUpper,&nbsp;toLower,<br>
&nbsp;&nbsp;&nbsp;&nbsp;ord,&nbsp;chr,<br>
&nbsp;&nbsp;&nbsp;&nbsp;readLitChar,&nbsp;showLitChar,&nbsp;lexLitChar<br>
&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;where<br>
<br>
import&nbsp;Array&nbsp;&nbsp;--&nbsp;used&nbsp;for&nbsp;character&nbsp;name&nbsp;table.<br>
<br>
import&nbsp;UnicodePrims&nbsp;&nbsp;--&nbsp;source&nbsp;of&nbsp;primitive&nbsp;Unicode&nbsp;functions.<br>
<br>
--&nbsp;Character-testing&nbsp;operations<br>
isAscii,&nbsp;isControl,&nbsp;isPrint,&nbsp;isSpace,&nbsp;isUpper,&nbsp;isLower,<br>
&nbsp;isAlpha,&nbsp;isDigit,&nbsp;isOctDigit,&nbsp;isHexDigit,&nbsp;isAlphanum&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Bool<br>
<br>
isAscii&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;c&nbsp;&lt;&nbsp;'\x80'<br>
<br>
isLatin1&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;c&nbsp;&lt;=&nbsp;'\xff'<br>
<br>
--&nbsp;Only&nbsp;ASCII&nbsp;Chars&nbsp;can&nbsp;be&nbsp;controls&nbsp;<br>
<br>
isControl&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;c&nbsp;&lt;&nbsp;'&nbsp;'&nbsp;||&nbsp;c&nbsp;&gt;=&nbsp;'\DEL'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'\x9f'<br>
<br>
--&nbsp;This&nbsp;function&nbsp;does&nbsp;not<br>
<br>
isPrint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;primUnicodeIsPrint<br>
<br>
--&nbsp;Only&nbsp;Latin-1&nbsp;spaces&nbsp;recognized<br>
<br>
isSpace&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;c&nbsp;`elem`&nbsp;"&nbsp;\t\n\r\f\v\xA0"<br>
<br>
isUpper&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;primUnicodeIsUpper<br>
<br>
isLower&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;primUnicodeIsLower<br>
<br>
isAlpha&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;isUpper&nbsp;c&nbsp;||&nbsp;isLower&nbsp;c<br>
<br>
isDigit&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;c&nbsp;&gt;=&nbsp;'0'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'9'<br>
<br>
isOctDigit&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;c&nbsp;&gt;=&nbsp;'0'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'7'<br>
<br>
isHexDigit&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;isDigit&nbsp;c&nbsp;||&nbsp;c&nbsp;&gt;=&nbsp;'A'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'F'&nbsp;||<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;&gt;=&nbsp;'a'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'f'<br>
<br>
isAlphanum&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;primUnicodeIsAlphnum<br>
<br>
<br>
--&nbsp;Digit&nbsp;conversion&nbsp;operations<br>
digitToInt&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Int<br>
digitToInt&nbsp;c<br>
&nbsp;&nbsp;|&nbsp;isDigit&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;fromEnum&nbsp;c&nbsp;-&nbsp;fromEnum&nbsp;'0'<br>
&nbsp;&nbsp;|&nbsp;c&nbsp;&gt;=&nbsp;'a'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'f'&nbsp;=&nbsp;&nbsp;fromEnum&nbsp;c&nbsp;-&nbsp;fromEnum&nbsp;'a'&nbsp;+&nbsp;10<br>
&nbsp;&nbsp;|&nbsp;c&nbsp;&gt;=&nbsp;'A'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'F'&nbsp;=&nbsp;&nbsp;fromEnum&nbsp;c&nbsp;-&nbsp;fromEnum&nbsp;'A'&nbsp;+&nbsp;10<br>
&nbsp;&nbsp;|&nbsp;otherwise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;error&nbsp;"Char.digitToInt:&nbsp;not&nbsp;a&nbsp;digit"<br>
<br>
intToDigit&nbsp;::&nbsp;Int&nbsp;-&gt;&nbsp;Char<br>
intToDigit&nbsp;i<br>
&nbsp;&nbsp;|&nbsp;i&nbsp;&gt;=&nbsp;0&nbsp;&nbsp;&amp;&amp;&nbsp;i&nbsp;&lt;=&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;toEnum&nbsp;(fromEnum&nbsp;'0'&nbsp;+&nbsp;i)<br>
&nbsp;&nbsp;|&nbsp;i&nbsp;&gt;=&nbsp;10&nbsp;&amp;&amp;&nbsp;i&nbsp;&lt;=&nbsp;15&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;toEnum&nbsp;(fromEnum&nbsp;'a'&nbsp;+&nbsp;i&nbsp;-&nbsp;10)<br>
&nbsp;&nbsp;|&nbsp;otherwise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;error&nbsp;"Char.intToDigit:&nbsp;not&nbsp;a&nbsp;digit"<br>
<br>
<br>
--&nbsp;Case-changing&nbsp;operations<br>
toUpper&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Char<br>
toUpper&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;primUnicodeToUpper<br>
<br>
toLower&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Char<br>
toLower&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;primUnicodeToLower<br>
<br>
--&nbsp;Character&nbsp;code&nbsp;functions<br>
ord&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;Int<br>
ord&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;fromEnum<br>
<br>
chr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Int&nbsp;&nbsp;-&gt;&nbsp;Char<br>
chr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;toEnum<br>
<br>
--&nbsp;Text&nbsp;functions<br>
readLitChar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;ReadS&nbsp;Char<br>
readLitChar&nbsp;('\\':s)&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;readEsc&nbsp;s<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('a':s)&nbsp;&nbsp;=&nbsp;[('\a',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('b':s)&nbsp;&nbsp;=&nbsp;[('\b',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('f':s)&nbsp;&nbsp;=&nbsp;[('\f',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('n':s)&nbsp;&nbsp;=&nbsp;[('\n',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('r':s)&nbsp;&nbsp;=&nbsp;[('\r',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('t':s)&nbsp;&nbsp;=&nbsp;[('\t',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('v':s)&nbsp;&nbsp;=&nbsp;[('\v',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('\\':s)&nbsp;=&nbsp;[('\\',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('"':s)&nbsp;&nbsp;=&nbsp;[('"',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('\'':s)&nbsp;=&nbsp;[('\'',s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('^':c:s)&nbsp;|&nbsp;c&nbsp;&gt;=&nbsp;'@'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'_'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[(chr&nbsp;(ord&nbsp;c&nbsp;-&nbsp;ord&nbsp;'@'),&nbsp;s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;s@(d:_)&nbsp;|&nbsp;isDigit&nbsp;d<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[(chr&nbsp;n,&nbsp;t)&nbsp;|&nbsp;(n,t)&nbsp;&lt;-&nbsp;readDec&nbsp;s]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('o':s)&nbsp;&nbsp;=&nbsp;[(chr&nbsp;n,&nbsp;t)&nbsp;|&nbsp;(n,t)&nbsp;&lt;-&nbsp;readOct&nbsp;s]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;('x':s)&nbsp;&nbsp;=&nbsp;[(chr&nbsp;n,&nbsp;t)&nbsp;|&nbsp;(n,t)&nbsp;&lt;-&nbsp;readHex&nbsp;s]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;s@(c:_)&nbsp;|&nbsp;isUpper&nbsp;c<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;let&nbsp;table&nbsp;=&nbsp;('\DEL'&nbsp;:=&nbsp;"DEL")&nbsp;:&nbsp;assocs&nbsp;asciiTab<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;case&nbsp;[(c,s')&nbsp;|&nbsp;(c&nbsp;:=&nbsp;mne)&nbsp;&lt;-&nbsp;table,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;([],s')&nbsp;&lt;-&nbsp;[match&nbsp;mne&nbsp;s]]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;(pr:_)&nbsp;-&gt;&nbsp;[pr]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;[]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readEsc&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[]<br>
readLitChar&nbsp;(c:s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;[(c,s)]<br>
<br>
sshowLitChar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;Char&nbsp;-&gt;&nbsp;ShowS<br>
showLitChar&nbsp;c&nbsp;|&nbsp;c&nbsp;&gt;&nbsp;'\DEL'&nbsp;=&nbsp;&nbsp;showChar&nbsp;'\\'&nbsp;.&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protectEsc&nbsp;isDigit&nbsp;(shows&nbsp;(ord&nbsp;c))<br>
showLitChar&nbsp;'\DEL'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\DEL"<br>
showLitChar&nbsp;'\\'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\\\"<br>
showLitChar&nbsp;c&nbsp;|&nbsp;c&nbsp;&gt;=&nbsp;'&nbsp;'&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showChar&nbsp;c<br>
showLitChar&nbsp;'\a'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\a"<br>
showLitChar&nbsp;'\b'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\b"<br>
showLitChar&nbsp;'\f'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\f"<br>
showLitChar&nbsp;'\n'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\n"<br>
showLitChar&nbsp;'\r'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\r"<br>
showLitChar&nbsp;'\t'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\t"<br>
showLitChar&nbsp;'\v'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;"\\v"<br>
showLitChar&nbsp;'\SO'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;protectEsc&nbsp;(==&nbsp;'H')&nbsp;(showString&nbsp;"\\SO")<br>
showLitChar&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;showString&nbsp;('\\'&nbsp;:&nbsp;asciiTab!c)<br>
<br>
protectEsc&nbsp;p&nbsp;f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;f&nbsp;.&nbsp;cont<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;cont&nbsp;s@(c:_)&nbsp;|&nbsp;p&nbsp;c&nbsp;=&nbsp;"\\&amp;"&nbsp;++&nbsp;s<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cont&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;s<br>
asciiTab&nbsp;=&nbsp;listArray&nbsp;('\NUL',&nbsp;'&nbsp;')<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;["NUL",&nbsp;"SOH",&nbsp;"STX",&nbsp;"ETX",&nbsp;"EOT",&nbsp;"ENQ",&nbsp;"ACK",&nbsp;"BEL",<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"BS",&nbsp;&nbsp;"HT",&nbsp;&nbsp;"LF",&nbsp;&nbsp;"VT",&nbsp;&nbsp;"FF",&nbsp;&nbsp;"CR",&nbsp;&nbsp;"SO",&nbsp;&nbsp;"SI",&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"DLE",&nbsp;"DC1",&nbsp;"DC2",&nbsp;"DC3",&nbsp;"DC4",&nbsp;"NAK",&nbsp;"SYN",&nbsp;"ETB",<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"CAN",&nbsp;"EM",&nbsp;&nbsp;"SUB",&nbsp;"ESC",&nbsp;"FS",&nbsp;&nbsp;"GS",&nbsp;&nbsp;"RS",&nbsp;&nbsp;"US",&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"SP"]&nbsp;<br>
<br>
lexLitChar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::&nbsp;ReadS&nbsp;String<br>
lexLitChar&nbsp;('\\':s)&nbsp;=&nbsp;&nbsp;[('\\':esc,&nbsp;t)&nbsp;|&nbsp;(esc,t)&nbsp;&lt;-&nbsp;lexEsc&nbsp;s]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lexEsc&nbsp;(c:s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;c&nbsp;`elem`&nbsp;"abfnrtv\\\"'"&nbsp;=&nbsp;[([c],s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lexEsc&nbsp;s@(d:_)&nbsp;&nbsp;&nbsp;|&nbsp;isDigit&nbsp;d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;lexDigits&nbsp;s<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lexEsc&nbsp;('^':c:s)&nbsp;|&nbsp;c&nbsp;&gt;=&nbsp;'@'&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;'_'&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[(['^',c],s)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;Very&nbsp;crude&nbsp;approximation&nbsp;to&nbsp;\XYZ.&nbsp;&nbsp;Let&nbsp;readers&nbsp;work&nbsp;this&nbsp;out.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lexEsc&nbsp;s@(c:_)&nbsp;&nbsp;&nbsp;|&nbsp;isUpper&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[span&nbsp;isCharName&nbsp;s]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lexEsc&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isCharName&nbsp;c&nbsp;=&nbsp;isUpper&nbsp;c&nbsp;||&nbsp;isDigit&nbsp;c<br>
<br>
lexLitChar&nbsp;(c:s)&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;[([c],s)]<br>
lexLitChar&nbsp;""&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;[]<br>
<br>
<p>
<hr><i>The Haskell 1.4 Library Report</i><br><a href="index.html">top</a> | <a href="maybe.html">back</a> | <a href="monad.html">next</a> | <a href="libindex.html">contents</a> <br><font size=2>April 4, 1997</font>
<p>
</tt>