hl/static/report/haskell2010/haskellch2.html
2014-03-15 03:18:15 +01:00

2384 lines
108 KiB
HTML

<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd-->
<html xmlns="http://www.w3.org/1999/xhtml"
>
<head><title>2 Lexical Structure</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<!-- 2,html,xhtml -->
<meta name="src" content="haskell.tex" />
<meta name="date" content="2010-07-20 13:11:00" />
<link rel="stylesheet" type="text/css" href="haskell.css" />
</head><body
>
<!--l. 7--><div class="crosslinks"><p class="noindent">[<a
href="haskellch3.html" >next</a>] [<a
href="haskellch1.html" >prev</a>] [<a
href="haskellch1.html#tailhaskellch1.html" >prev-tail</a>] [<a
href="#tailhaskellch2.html">tail</a>] [<a
href="haskellpa1.html#haskellch2.html" >up</a>] </p></div>
<h2 class="chapterHead"><span class="titlemark">Chapter&#x00A0;2</span><br /><a
id="x7-140002"></a>Lexical Structure</h2><a
id="dx7-14001"></a>
<p class="noindent"> In this chapter, we describe the low-level lexical structure of Haskell. Most of the details may be skipped in a first
reading of the report.
<h3 class="sectionHead"><span class="titlemark">2.1 </span> <a
id="x7-150002.1"></a>Notational Conventions</h3>
<p class="noindent"> These notational conventions are used for presenting syntax:
<p class="noindent">
<div class="array"> <table id="TBL-1" class="array"
cellpadding="0" cellspacing="0"
><colgroup id="TBL-1-1g"><col
id="TBL-1-1" /><col
id="TBL-1-2" /></colgroup><tr
style="vertical-align:baseline;"><td style="white-space:nowrap; text-align:center;"
><div class="td11"> <span
class="cmr-10">[</span><span
class="cmmi-10">pattern</span><span
class="cmr-10">]</span> </div></td><td style="white-space:nowrap; text-align:left;"
><div class="td11"> optional </div></td>
</tr><tr
style="vertical-align:baseline;"><td style="white-space:nowrap; text-align:center;"
><div class="td11"> <span
class="cmsy-10">{</span><span
class="cmmi-10">pattern</span><span
class="cmsy-10">}</span> </div></td><td style="white-space:nowrap; text-align:left;"
><div class="td11"> zero or more repetitions </div></td>
</tr><tr
style="vertical-align:baseline;"><td style="white-space:nowrap; text-align:center;"
><div class="td11"> <span
class="cmr-10">(</span><span
class="cmmi-10">pattern</span><span
class="cmr-10">)</span> </div></td><td style="white-space:nowrap; text-align:left;"
><div class="td11"> grouping </div></td>
</tr><tr
style="vertical-align:baseline;"><td style="white-space:nowrap; text-align:center;"
><div class="td11"> <span
class="cmmi-10">pat</span><sub><span
class="cmr-7">1</span></sub><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;pat</span><sub><span
class="cmr-7">2</span></sub> </div></td><td style="white-space:nowrap; text-align:left;"
><div class="td11"> choice </div></td>
</tr><tr
style="vertical-align:baseline;"><td style="white-space:nowrap; text-align:center;"
><div class="td11"> <span
class="cmmi-10">pat</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="cmmi-7">pat</span><span
class="cmsy-7">&prime;&#x27E9;</span></sub> </div></td><td style="white-space:nowrap; text-align:left;"
><div class="td11"> difference&#8212;elements generated by <span
class="cmmi-10">pat</span> </div></td>
</tr><tr
style="vertical-align:baseline;"><td style="white-space:nowrap; text-align:center;"
><div class="td11"> </div></td><td style="white-space:nowrap; text-align:left;"
><div class="td11"> except those generated by <span
class="cmmi-10">pat</span><span
class="cmsy-10">&prime;</span> </div></td>
</tr><tr
style="vertical-align:baseline;"><td style="white-space:nowrap; text-align:center;"
><div class="td11"> <span
class="pcrr7t-">fibonacci</span> </div></td><td style="white-space:nowrap; text-align:left;"
><div class="td11"> terminal syntax in typewriter font </div></td>
</tr></table> </div>
<p class="noindent"> Because the syntax in this section describes <span
class="ptmri7t-">lexical </span>syntax, all whitespace is expressed explicitly; there is no implicit
space between juxtaposed symbols. BNF-like syntax is used throughout, with productions having the
form:
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-2" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-2-1g"><col
id="TBL-2-1" /><col
id="TBL-2-2" /><col
id="TBL-2-3" /><col
id="TBL-2-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-1"
class="td11"> <span
class="cmmi-10">nonterm </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-2-1-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-3"
class="td11"> <span
class="cmmi-10">alt</span><sub><span
class="cmr-7">1</span></sub><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;alt</span><sub><span
class="cmr-7">2</span></sub><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">&hellip;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;alt</span><sub><span
class="cmmi-7">n</span></sub> </td>
</tr></table>
</div></div>
<p class="noindent"> Care must be taken in distinguishing metalogical syntax such as <span
class="cmsy-10">|</span> and <span
class="cmr-10">[</span><span
class="cmmi-10">&hellip;</span><span
class="cmr-10">]</span> from concrete terminal syntax
(given in typewriter font) such as <span
class="pcrr7t-">|</span> and <span
class="pcrr7t-">[...]</span>, although usually the context makes the distinction
clear.
<p class="noindent"> Haskell uses the Unicode <span class="cite">[<a
href="haskellli3.html#Xunicode">2</a>]</span> character set. <a
id="dx7-15001"></a>However, source programs are currently biased toward the ASCII
character set <a
id="dx7-15002"></a>used in earlier versions of Haskell.
<p class="noindent"> This syntax depends on properties of the Unicode characters as defined by the Unicode consortium. Haskell
compilers are expected to make use of new versions of Unicode as they are made available.
<p class="noindent">
<h3 class="sectionHead"><span class="titlemark">2.2 </span> <a
id="x7-160002.2"></a>Lexical Program Structure</h3>
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-3" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-3-1g"><col
id="TBL-3-1" /><col
id="TBL-3-2" /><col
id="TBL-3-3" /><col
id="TBL-3-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-3-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-1-1"
class="td11"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-2-1"
class="td11"> <span
class="cmmi-10">program </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-2-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-2-3"
class="td11"> <span
class="cmsy-10">{</span><span
class="cmmi-10">&#x00A0;lexeme</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;whitespace</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">} </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-3-1"
class="td11"> <span
class="cmmi-10">lexeme </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-3-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-3-3"
class="td11"> <span
class="cmmi-10">qvarid</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;qconid</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;qvarsym</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;qconsym </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-4-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-3-4-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-4-3"
class="td11"> <span
class="cmmi-10">literal</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;special</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;reservedop</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;reservedid </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-5-1"
class="td11"> <span
class="cmmi-10">literal </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-5-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-5-3"
class="td11"> <span
class="cmmi-10">integer</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;float</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;char</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;string </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-6-1"
class="td11"> <span
class="cmmi-10">special </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-6-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-6-3"
class="td11"> <span
class="pcrr7t-">(</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">)</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">,</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">[</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">]</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">`</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">{</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">}</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-7-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td></tr><tr
style="vertical-align:baseline;" id="TBL-3-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-8-1"
class="td11"></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-9-1"
class="td11"> <span
class="cmmi-10">whitespace </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-9-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-9-3"
class="td11"> <span
class="cmmi-10">whitestuff</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">whitestuff</span><span
class="cmsy-10">} </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-10-1"
class="td11"> <span
class="cmmi-10">whitestuff </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-10-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-10-3"
class="td11"> <span
class="cmmi-10">whitechar</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;comment</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;ncomment </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-11-1"
class="td11"> <span
class="cmmi-10">whitechar </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-11-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-11-3"
class="td11"> <span
class="cmmi-10">newline</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;vertab</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;space</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;tab</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;uniWhite </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-12-1"
class="td11"> <span
class="cmmi-10">newline </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-12-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-12-3"
class="td11"> <span
class="cmmi-10">return</span><span
class="cmmi-10">&#x00A0;linefeed</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;return</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;linefeed</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;formfeed </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-13-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-13-1"
class="td11"> <span
class="cmmi-10">return </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-13-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-13-3"
class="td11"> a&#x00A0;carriage&#x00A0;return </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-14-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-14-1"
class="td11"> <span
class="cmmi-10">linefeed </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-14-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-14-3"
class="td11"> a&#x00A0;line&#x00A0;feed </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-15-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-15-1"
class="td11"> <span
class="cmmi-10">vertab </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-15-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-15-3"
class="td11"> a&#x00A0;vertical&#x00A0;tab </td></tr><tr
style="vertical-align:baseline;" id="TBL-3-16-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-16-1"
class="td11"> <span
class="cmmi-10">formfeed </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-16-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-16-3"
class="td11"> a&#x00A0;form&#x00A0;feed</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-17-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-17-1"
class="td11"> <span
class="cmmi-10">space </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-17-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-17-3"
class="td11"> a&#x00A0;space </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-18-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-18-1"
class="td11"> <span
class="cmmi-10">tab </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-18-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-18-3"
class="td11"> a&#x00A0;horizontal&#x00A0;tab </td></tr><tr
style="vertical-align:baseline;" id="TBL-3-19-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-19-1"
class="td11"> <span
class="cmmi-10">uniWhite </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-19-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-19-3"
class="td11"> any&#x00A0;Unicode&#x00A0;character&#x00A0;defined&#x00A0;as&#x00A0;whitespace</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-20-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-20-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td></tr><tr
style="vertical-align:baseline;" id="TBL-3-21-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-21-1"
class="td11"></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-22-1"
class="td11"> <span
class="cmmi-10">comment </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-22-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-22-3"
class="td11"> <span
class="cmmi-10">dashes</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">[</span><span
class="cmmi-10">&#x00A0;any</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="cmmi-7">symbol</span><span
class="cmsy-7">&#x27E9;</span></sub><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">any</span><span
class="cmsy-10">}</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;newline </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-23-1"
class="td11"> <span
class="cmmi-10">dashes </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-23-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-23-3"
class="td11"> <span
class="pcrr7t-">--</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="pcrr7t-">-</span><span
class="cmsy-10">} </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-24-1"
class="td11"> <span
class="cmmi-10">opencom </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-24-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-24-3"
class="td11"> <span
class="pcrr7t-">{-</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-25-1"
class="td11"> <span
class="cmmi-10">closecom </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-25-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-25-3"
class="td11"> <span
class="pcrr7t-">-}</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-26-1"
class="td11"> <span
class="cmmi-10">ncomment </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-26-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-26-3"
class="td11"> <span
class="cmmi-10">opencom</span><span
class="cmmi-10">&#x00A0;ANY seq</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">ncomment</span><span
class="cmmi-10">&#x00A0;ANY seq</span><span
class="cmsy-10">}</span><span
class="cmmi-10">&#x00A0;closecom </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-27-1"
class="td11"> <span
class="cmmi-10">ANY seq </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-27-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-27-3"
class="td11"> <span
class="cmsy-10">{</span><span
class="cmmi-10">ANY </span><span
class="cmsy-10">}</span><sub><span
class="cmsy-7">&#x27E8;{</span><span
class="cmmi-7">ANY </span><span
class="cmsy-7">}</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmr-7">(</span><span
class="cmmi-7">&#x00A0;opencom</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">|</span><span
class="cmmi-7">&#x00A0;closecom</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmr-7">)</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">{</span><span
class="cmmi-7">ANY </span><span
class="cmsy-7">}&#x27E9;</span></sub> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-28-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-28-1"
class="td11"> <span
class="cmmi-10">ANY </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-28-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-28-3"
class="td11"> <span
class="cmmi-10">graphic</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;whitechar </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-29-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-29-1"
class="td11"> <span
class="cmmi-10">any </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-29-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-29-3"
class="td11"> <span
class="cmmi-10">graphic</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;space</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;tab </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-30-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-30-1"
class="td11"> <span
class="cmmi-10">graphic </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-30-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-30-3"
class="td11"> <span
class="cmmi-10">small</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;large</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;symbol</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;digit</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;special</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">"</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">'</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-31-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-31-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-32-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-32-1"
class="td11"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-33-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-33-1"
class="td11"> <span
class="cmmi-10">small </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-33-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-33-3"
class="td11"> <span
class="cmmi-10">ascSmall</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;uniSmall</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">_</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-34-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-34-1"
class="td11"> <span
class="cmmi-10">ascSmall </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-34-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-34-3"
class="td11"> <span
class="pcrr7t-">a</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">b</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">&hellip;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">z</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-35-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-35-1"
class="td11"> <span
class="cmmi-10">uniSmall </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-35-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-35-3"
class="td11"> any&#x00A0;Unicode&#x00A0;lowercase&#x00A0;letter </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-36-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-36-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-37-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-37-1"
class="td11"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-38-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-38-1"
class="td11"> <span
class="cmmi-10">large </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-38-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-38-3"
class="td11"> <span
class="cmmi-10">ascLarge</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;uniLarge </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-39-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-39-1"
class="td11"> <span
class="cmmi-10">ascLarge </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-39-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-39-3"
class="td11"> <span
class="pcrr7t-">A</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">B</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">&hellip;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">Z</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-40-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-40-1"
class="td11"> <span
class="cmmi-10">uniLarge </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-40-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-40-3"
class="td11"> any&#x00A0;uppercase&#x00A0;or&#x00A0;titlecase&#x00A0;Unicode&#x00A0;letter </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-41-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-41-1"
class="td11"> <span
class="cmmi-10">symbol </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-41-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-41-3"
class="td11"> <span
class="cmmi-10">ascSymbol</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;uniSymbol</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="cmmi-7">special</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">|</span><span
class="cmmi-7">&#x00A0;</span><span
class="pcrr7t-">_</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">|</span><span
class="cmmi-7">&#x00A0;</span><span
class="pcrr7t-">"</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">|</span><span
class="cmmi-7">&#x00A0;</span><span
class="pcrr7t-">'</span><span
class="cmsy-7">&#x27E9;</span></sub> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-42-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-42-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-43-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-43-1"
class="td11"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-44-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-44-1"
class="td11"> <span
class="cmmi-10">ascSymbol </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-44-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-44-3"
class="td11"> <span
class="pcrr7t-">!</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">#</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">$</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">%</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">&amp;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">&#x22C6;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">+</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">/</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">&#x003C;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">=</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">&#x003E;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">?</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">@ </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-45-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-45-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-3-45-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-45-3"
class="td11"> <span
class="pcrr7t-">\</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">^</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">-</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">~</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">:</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-46-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-46-1"
class="td11"> <span
class="cmmi-10">uniSymbol </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-46-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-46-3"
class="td11"> any&#x00A0;Unicode&#x00A0;symbol&#x00A0;or&#x00A0;punctuation </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-47-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-47-1"
class="td11"> <span
class="cmmi-10">digit </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-47-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-47-3"
class="td11"> <span
class="cmmi-10">ascDigit</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;uniDigit </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-48-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-48-1"
class="td11"> <span
class="cmmi-10">ascDigit </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-48-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-48-3"
class="td11"> <span
class="pcrr7t-">0</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">1</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">&hellip;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">9</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-49-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-49-1"
class="td11"> <span
class="cmmi-10">uniDigit </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-49-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-49-3"
class="td11"> any&#x00A0;Unicode&#x00A0;decimal&#x00A0;digit </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-50-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-50-1"
class="td11"> <span
class="cmmi-10">octit </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-50-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-50-3"
class="td11"> <span
class="pcrr7t-">0</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">1</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">&hellip;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">7</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-51-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-51-1"
class="td11"> <span
class="cmmi-10">hexit </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-3-51-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-51-3"
class="td11"> <span
class="cmmi-10">digit</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">A</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">&hellip;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">F</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">a</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">&hellip;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">f</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-52-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-52-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-53-"><td style="white-space:nowrap; text-align:left;" id="TBL-3-53-1"
class="td11"> </td>
</tr></table></div></div>
<a
id="dx7-16001"></a>
<a
id="dx7-16002"></a>
<a
id="dx7-16003"></a>
<a
id="dx7-16004"></a>
<a
id="dx7-16005"></a>
<a
id="dx7-16006"></a>
<a
id="dx7-16007"></a>
<a
id="dx7-16008"></a>
<a
id="dx7-16009"></a>
<a
id="dx7-16010"></a>
<a
id="dx7-16011"></a>
<a
id="dx7-16012"></a>
<a
id="dx7-16013"></a>
<a
id="dx7-16014"></a>
<a
id="dx7-16015"></a>
<a
id="dx7-16016"></a>
<a
id="dx7-16017"></a>
<a
id="dx7-16018"></a>
<a
id="dx7-16019"></a>
<a
id="dx7-16020"></a>
<a
id="dx7-16021"></a>
<a
id="dx7-16022"></a>
<a
id="dx7-16023"></a>
<a
id="dx7-16024"></a>
<a
id="dx7-16025"></a>
<a
id="dx7-16026"></a>
<a
id="dx7-16027"></a>
<a
id="dx7-16028"></a>
<a
id="dx7-16029"></a>
<a
id="dx7-16030"></a>
<a
id="dx7-16031"></a>
<a
id="dx7-16032"></a>
<a
id="dx7-16033"></a>
<a
id="dx7-16034"></a>
<a
id="dx7-16035"></a>
<a
id="dx7-16036"></a>
<a
id="dx7-16037"></a>
<p class="noindent"> Lexical analysis should use the &#8220;maximal munch&#8221; rule: at each point, the longest possible lexeme satisfying the
<span
class="cmmi-10">lexeme</span> production is read. <a
id="dx7-16038"></a>So, although <span
class="pcrr7t-">case</span> is a reserved word, <span
class="pcrr7t-">cases</span> is not. Similarly, although <span
class="pcrr7t-">=</span> is reserved,
<span
class="pcrr7t-">==</span> and <span
class="pcrr7t-">~=</span> are not.
<p class="noindent"> Any kind of <span
class="cmmi-10">whitespace</span> is also a proper delimiter for lexemes.
<p class="noindent"> Characters not in the category <span
class="cmmi-10">ANY</span> are not valid in Haskell programs and should result in a lexing
error.
<p class="noindent">
<h3 class="sectionHead"><span class="titlemark">2.3 </span> <a
id="x7-170002.3"></a>Comments</h3>
<p class="noindent"> Comments<a
id="dx7-17001"></a> are valid whitespace.
<p class="noindent"> An ordinary comment<a
id="dx7-17002"></a> begins with a sequence of two or more consecutive dashes (e.g. <span
class="pcrr7t-">--</span>) and extends to the
following newline. <span
class="ptmri7t-">The sequence of dashes must not form part of a legal lexeme. </span>For example, &#8220;<span
class="pcrr7t-">--&#x003E;</span>&#8221; or
&#8220;<span
class="pcrr7t-">|--</span>&#8221; do <span
class="ptmri7t-">not </span>begin a comment, because both of these are legal lexemes; however &#8220;<span
class="pcrr7t-">--foo</span>&#8221; does start a
comment.
<p class="noindent"> A nested comment<a
id="dx7-17003"></a> begins with &#8220;<span
class="pcrr7t-">{-</span>&#8221; and ends with &#8220;<span
class="pcrr7t-">-}</span>&#8221;. No legal lexeme starts with &#8220;<span
class="pcrr7t-">{-</span>&#8221;; hence, for example,
&#8220;<span
class="pcrr7t-">{---</span>&#8221; starts a nested comment despite the trailing dashes.
<p class="noindent"> The comment itself is not lexically analysed. Instead, the first unmatched occurrence of the string &#8220;<span
class="pcrr7t-">-}</span>&#8221; terminates
the nested comment. Nested comments may be nested to any depth: any occurrence of the string &#8220;<span
class="pcrr7t-">{-</span>&#8221; within the
nested comment starts a new nested comment, terminated by &#8220;<span
class="pcrr7t-">-}</span>&#8221;. Within a nested comment, each &#8220;<span
class="pcrr7t-">{-</span>&#8221; is matched
by a corresponding occurrence of &#8220;<span
class="pcrr7t-">-}</span>&#8221;.
<p class="noindent"> In an ordinary comment, the character sequences &#8220;<span
class="pcrr7t-">{-</span>&#8221; and &#8220;<span
class="pcrr7t-">-}</span>&#8221; have no special significance, and, in a nested
comment, a sequence of dashes has no special significance.
<p class="noindent"> Nested comments are also used for compiler pragmas, as explained in Chapter&#x00A0;<a
href="haskellch12.html#x19-18800012">12<!--tex4ht:ref: pragmas --></a>.
<p class="noindent"> If some code is commented out using a nested comment, then any occurrence of <span
class="pcrr7t-">{-</span> or <span
class="pcrr7t-">-}</span> within a string or within
an end-of-line comment in that code will interfere with the nested comments.
<p class="noindent">
<h3 class="sectionHead"><span class="titlemark">2.4 </span> <a
id="x7-180002.4"></a>Identifiers and Operators</h3>
<a
id="dx7-18001"></a>
<a
id="dx7-18002"></a>
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-4" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-4-1g"><col
id="TBL-4-1" /><col
id="TBL-4-2" /><col
id="TBL-4-3" /><col
id="TBL-4-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-4-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-4-1-1"
class="td11"> <span
class="cmmi-10">varid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-4-1-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-4-1-3"
class="td11"> <span
class="cmr-10">(</span><span
class="cmmi-10">small</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">small</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;large</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;digit</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">'</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">}</span><span
class="cmr-10">)</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="cmmi-7">reservedid</span><span
class="cmsy-7">&#x27E9;</span></sub> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-4-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-4-2-1"
class="td11"> <span
class="cmmi-10">conid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-4-2-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-4-2-3"
class="td11"> <span
class="cmmi-10">large</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">small</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;large</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;digit</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">'</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">} </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-4-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-4-3-1"
class="td11"> <span
class="cmmi-10">reservedid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-4-3-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-4-3-3"
class="td11"> <span
class="pcrr7t-">case</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">class</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">data</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">default</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">deriving</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">do</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">else</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-4-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-4-4-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-4-4-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-4-4-3"
class="td11"> <span
class="pcrr7t-">foreign</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">if</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">import</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">in</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">infix</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">infixl</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-4-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-4-5-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-4-5-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-4-5-3"
class="td11"> <span
class="pcrr7t-">infixr</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">instance</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">let</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">module</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">newtype</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">of</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-4-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-4-6-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-4-6-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-4-6-3"
class="td11"> <span
class="pcrr7t-">then</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">type</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">where</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">_</span> </td>
</tr></table></div></div>
<a
id="dx7-18003"></a>
<a
id="dx7-18004"></a>
<a
id="dx7-18005"></a>
<p class="noindent"> An identifier consists of a letter followed by zero or more letters, digits, underscores, and single quotes. Identifiers
are lexically distinguished into two namespaces (Section&#x00A0;<a
href="haskellch1.html#x6-130001.4">1.4<!--tex4ht:ref: namespaces --></a>): those that begin with a lowercase letter (variable
identifiers) and those that begin with an upper-case letter (constructor identifiers). Identifiers are case sensitive: <span
class="pcrr7t-">name</span>,
<span
class="pcrr7t-">naMe</span>, and <span
class="pcrr7t-">Name</span> are three distinct identifiers (the first two are variable identifiers, the last is a constructor
identifier).
<p class="noindent"> Underscore, &#8220;<span
class="pcrr7t-">_</span>&#8221;, is treated as a lowercase letter, and can occur wherever a lowercase letter can. However, &#8220;<span
class="pcrr7t-">_</span>&#8221; all by
itself is a reserved identifier, used as wild card in patterns. Compilers that offer warnings for unused identifiers are
encouraged to suppress such warnings for identifiers beginning with underscore. This allows programmers to use
&#8220;<span
class="pcrr7t-">_foo</span>&#8221; for a parameter that they expect to be unused.
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-5" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-5-1g"><col
id="TBL-5-1" /><col
id="TBL-5-2" /><col
id="TBL-5-3" /><col
id="TBL-5-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-5-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-5-1-1"
class="td11"> <span
class="cmmi-10">varsym </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-5-1-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-5-1-3"
class="td11"> <span
class="cmr-10">(</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmmi-10">symbol</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="pcrr7t-">:</span><span
class="cmsy-7">&#x27E9;</span></sub><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">symbol</span><span
class="cmsy-10">}</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">)</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="cmmi-7">reservedop</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">|</span><span
class="cmmi-7">&#x00A0;dashes</span><span
class="cmsy-7">&#x27E9;</span></sub> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-5-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-5-2-1"
class="td11"> <span
class="cmmi-10">consym </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-5-2-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-5-2-3"
class="td11"> <span
class="cmr-10">(</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">:</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">symbol</span><span
class="cmsy-10">}</span><span
class="cmr-10">)</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="cmmi-7">reservedop</span><span
class="cmsy-7">&#x27E9;</span></sub> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-5-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-5-3-1"
class="td11"> <span
class="cmmi-10">reservedop </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-5-3-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-5-3-3"
class="td11"> <span
class="pcrr7t-">..</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">:</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">::</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">=</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">\</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">&#x003C;-</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">-&#x003E;</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span class="obeylines-h"><span class="verb"><span
class="pcrr7t-">@</span></span></span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">~</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">=&#x003E;</span> </td>
</tr></table></div></div>
<a
id="dx7-18006"></a>
<a
id="dx7-18007"></a>
<a
id="dx7-18008"></a>
<p class="noindent"> <span
class="ptmri7t-">Operator symbols</span> <a
id="dx7-18009"></a>are formed from one or more symbol characters, as defined above, and are lexically distinguished
into two namespaces (Section&#x00A0;<a
href="haskellch1.html#x6-130001.4">1.4<!--tex4ht:ref: namespaces --></a>):
<ul class="itemize1">
<li class="itemize">An operator symbol starting with a colon is a constructor.
</li>
<li class="itemize">An operator symbol starting with any other character is an ordinary identifier.</li></ul>
<p class="noindent"> Notice that a colon by itself, &#8220;<span
class="pcrr7t-">:</span>&#8221;, is reserved solely for use as the Haskell list constructor; this makes its treatment
uniform with other parts of list syntax, such as &#8220;<span
class="pcrr7t-">[]</span>&#8221; and &#8220;<span
class="pcrr7t-">[a,b]</span>&#8221;.
<p class="noindent"> Other than the special syntax for prefix negation, all operators are infix, although each infix operator can be used in a
<span
class="ptmri7t-">section</span><a
id="dx7-18010"></a> to yield partially applied operators (see Section&#x00A0;<a
href="haskellch3.html#x8-300003.5">3.5<!--tex4ht:ref: sections --></a>). All of the standard infix operators are just predefined
symbols and may be rebound.
<p class="noindent"> In the remainder of the report six different kinds of names<a
id="dx7-18011"></a> will be used:
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-6" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-6-1g"><col
id="TBL-6-1" /><col
id="TBL-6-2" /><col
id="TBL-6-3" /><col
id="TBL-6-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-6-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-1-1"
class="td11"> <span
class="cmmi-10">varid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-6-1-2"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0; </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-1-3"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="cmr-10">(</span>variables<span
class="cmr-10">) </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-2-1"
class="td11"> <span
class="cmmi-10">conid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-6-2-2"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0; </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-2-3"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="cmr-10">(</span>constructors<span
class="cmr-10">) </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-3-1"
class="td11"> <span
class="cmmi-10">tyvar </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-6-3-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-3-3"
class="td11"> <span
class="cmmi-10">varid </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-3-4"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="cmr-10">(</span>type&#x00A0;variables<span
class="cmr-10">) </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-4-1"
class="td11"> <span
class="cmmi-10">tycon </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-6-4-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-4-3"
class="td11"> <span
class="cmmi-10">conid </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-4-4"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="cmr-10">(</span>type&#x00A0;constructors<span
class="cmr-10">) </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-5-1"
class="td11"> <span
class="cmmi-10">tycls </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-6-5-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-5-3"
class="td11"> <span
class="cmmi-10">conid </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-5-4"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="cmr-10">(</span>type&#x00A0;classes<span
class="cmr-10">) </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-6-1"
class="td11"> <span
class="cmmi-10">modid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-6-6-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-6-3"
class="td11"> <span
class="cmsy-10">{</span><span
class="cmmi-10">conid</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmsy-10">}</span><span
class="cmmi-10">&#x00A0;conid</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-6-4"
class="td11"> <span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="ptmri7t-">&#x00A0;</span><span
class="cmr-10">(</span>modules<span
class="cmr-10">) </span></td>
</tr></table></div></div>
<a
id="dx7-18012"></a>
<a
id="dx7-18013"></a>
<a
id="dx7-18014"></a>
<a
id="dx7-18015"></a>
<a
id="dx7-18016"></a>
<a
id="dx7-18017"></a>
<p class="noindent"> Variables and type variables are represented by identifiers beginning with small letters, and the others by identifiers
beginning with capitals; also, variables and constructors have infix forms, the other four do not. Module names are a
dot-separated sequence of <span
class="cmmi-10">conid</span>s. Namespaces are also discussed in Section&#x00A0;<a
href="haskellch1.html#x6-130001.4">1.4<!--tex4ht:ref: namespaces --></a>.
<a
id="dx7-18018"></a>
<p class="noindent"> A name may optionally be <span
class="ptmri7t-">qualified </span>in certain circumstances by prepending them with a module identifier. This
applies to variable, constructor, type constructor and type class names, but not type variables or module names.
Qualified names are discussed in detail in Chapter&#x00A0;<a
href="haskellch5.html#x11-980005">5<!--tex4ht:ref: modules --></a>.
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-7" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-7-1g"><col
id="TBL-7-1" /><col
id="TBL-7-2" /><col
id="TBL-7-3" /><col
id="TBL-7-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-7-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-7-1-1"
class="td11"> <span
class="cmmi-10">qvarid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-7-1-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-7-1-3"
class="td11"> <span
class="cmr-10">[</span><span
class="cmmi-10">modid</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;varid </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-7-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-7-2-1"
class="td11"> <span
class="cmmi-10">qconid </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-7-2-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-7-2-3"
class="td11"> <span
class="cmr-10">[</span><span
class="cmmi-10">modid</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;conid </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-7-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-7-3-1"
class="td11"> <span
class="cmmi-10">qtycon </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-7-3-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-7-3-3"
class="td11"> <span
class="cmr-10">[</span><span
class="cmmi-10">modid</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;tycon </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-7-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-7-4-1"
class="td11"> <span
class="cmmi-10">qtycls </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-7-4-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-7-4-3"
class="td11"> <span
class="cmr-10">[</span><span
class="cmmi-10">modid</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;tycls </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-7-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-7-5-1"
class="td11"> <span
class="cmmi-10">qvarsym </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-7-5-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-7-5-3"
class="td11"> <span
class="cmr-10">[</span><span
class="cmmi-10">modid</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;varsym </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-7-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-7-6-1"
class="td11"> <span
class="cmmi-10">qconsym </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-7-6-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-7-6-3"
class="td11"> <span
class="cmr-10">[</span><span
class="cmmi-10">modid</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;consym </span></td>
</tr></table></div></div>
<a
id="dx7-18019"></a>
<a
id="dx7-18020"></a>
<a
id="dx7-18021"></a>
<a
id="dx7-18022"></a>
<a
id="dx7-18023"></a>
<a
id="dx7-18024"></a>
<p class="noindent"> Since a qualified name is a lexeme, no spaces are allowed between the qualifier and the name. Sample lexical
analyses are shown below.
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-8" class="tabular"
cellspacing="0" cellpadding="0" rules="groups"
><colgroup id="TBL-8-1g"><col
id="TBL-8-1" /></colgroup><colgroup id="TBL-8-2g"><col
id="TBL-8-2" /></colgroup><tr
class="hline"><td><hr /></td><td><hr /></td></tr><tr
style="vertical-align:baseline;" id="TBL-8-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-1-1"
class="td11"> This </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-1-2"
class="td11"> Lexes as this </td></tr><tr
class="hline"><td><hr /></td><td><hr /></td></tr><tr
style="vertical-align:baseline;" id="TBL-8-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-2-1"
class="td11"> <span
class="pcrr7t-">f.g</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-2-2"
class="td11"> <span
class="pcrr7t-">f</span><span
class="pcrr7t-">&#x00A0;.</span><span
class="pcrr7t-">&#x00A0;g</span> (three tokens)</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-8-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-3-1"
class="td11"> <span
class="pcrr7t-">F.g</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-3-2"
class="td11"> <span
class="pcrr7t-">F.g</span> (qualified &#8216;g&#8217;) </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-8-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-4-1"
class="td11"> <span
class="pcrr7t-">f..</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-4-2"
class="td11"> <span
class="pcrr7t-">f</span><span
class="pcrr7t-">&#x00A0;..</span> (two tokens) </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-8-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-5-1"
class="td11"> <span
class="pcrr7t-">F..</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-5-2"
class="td11"> <span
class="pcrr7t-">F..</span> (qualified &#8216;.&#8217;) </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-8-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-6-1"
class="td11"> <span
class="pcrr7t-">F.</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-6-2"
class="td11"> <span
class="pcrr7t-">F</span><span
class="pcrr7t-">&#x00A0;.</span> (two tokens) </td>
</tr><tr
class="hline"><td><hr /></td><td><hr /></td></tr><tr
style="vertical-align:baseline;" id="TBL-8-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-7-1"
class="td11"> </td>
</tr></table> </div>
The qualifier does not change the syntactic treatment of a name; for example, <span
class="pcrr7t-">Prelude.+</span> is an infix operator with
the same fixity as the definition of <span
class="pcrr7t-">+</span> in the Prelude (Section&#x00A0;<a
href="haskellch4.html#x10-820004.4.2">4.4.2<!--tex4ht:ref: fixity --></a>).
<p class="noindent">
<h3 class="sectionHead"><span class="titlemark">2.5 </span> <a
id="x7-190002.5"></a>Numeric Literals</h3>
<a
id="dx7-19001"></a>
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-9" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-9-1g"><col
id="TBL-9-1" /><col
id="TBL-9-2" /><col
id="TBL-9-3" /><col
id="TBL-9-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-9-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-9-1-1"
class="td11"> <span
class="cmmi-10">decimal </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-9-1-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-9-1-3"
class="td11"> <span
class="cmmi-10">digit</span><span
class="cmsy-10">{</span><span
class="cmmi-10">digit</span><span
class="cmsy-10">} </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-9-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-9-2-1"
class="td11"> <span
class="cmmi-10">octal </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-9-2-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-9-2-3"
class="td11"> <span
class="cmmi-10">octit</span><span
class="cmsy-10">{</span><span
class="cmmi-10">octit</span><span
class="cmsy-10">} </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-9-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-9-3-1"
class="td11"> <span
class="cmmi-10">hexadecimal </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-9-3-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-9-3-3"
class="td11"> <span
class="cmmi-10">hexit</span><span
class="cmsy-10">{</span><span
class="cmmi-10">hexit</span><span
class="cmsy-10">} </span></td>
</tr></table></div></div>
<a
id="dx7-19002"></a>
<a
id="dx7-19003"></a>
<a
id="dx7-19004"></a>
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"><table id="TBL-10" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-10-1g"><col
id="TBL-10-1" /><col
id="TBL-10-2" /><col
id="TBL-10-3" /><col
id="TBL-10-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-10-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-1-1"
class="td11"> <span
class="cmmi-10">integer </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-10-1-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-10-1-3"
class="td11"> <span
class="cmmi-10">decimal </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-2-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-10-2-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-10-2-3"
class="td11"> <span
class="pcrr7t-">0o</span><span
class="cmmi-10">&#x00A0;octal</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">0O</span><span
class="cmmi-10">&#x00A0;octal </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-3-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-10-3-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-10-3-3"
class="td11"> <span
class="pcrr7t-">0x</span><span
class="cmmi-10">&#x00A0;hexadecimal</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">0X</span><span
class="cmmi-10">&#x00A0;hexadecimal </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-4-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td></tr><tr
style="vertical-align:baseline;" id="TBL-10-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-5-1"
class="td11"></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-6-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td></tr><tr
style="vertical-align:baseline;" id="TBL-10-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-7-1"
class="td11"></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-8-1"
class="td11"> <span
class="cmmi-10">float </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-10-8-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-10-8-3"
class="td11"> <span
class="cmmi-10">decimal</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">.</span><span
class="cmmi-10">&#x00A0;decimal</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">[</span><span
class="cmmi-10">exponent</span><span
class="cmr-10">] </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-9-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-10-9-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-10-9-3"
class="td11"> <span
class="cmmi-10">decimal</span><span
class="cmmi-10">&#x00A0;exponent </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-10-1"
class="td11"> <span
class="ptmri7t-">&#x00A0; </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-11-1"
class="td11"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-10-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-10-12-1"
class="td11"> <span
class="cmmi-10">exponent </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-10-12-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-10-12-3"
class="td11"> <span
class="cmr-10">(</span><span
class="pcrr7t-">e</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">E</span><span
class="cmr-10">)</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">[</span><span
class="pcrr7t-">+</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">-</span><span
class="cmr-10">]</span><span
class="cmmi-10">&#x00A0;decimal </span></td>
</tr></table></div></div>
<a
id="dx7-19005"></a>
<a
id="dx7-19006"></a>
<p class="noindent"> There are two distinct kinds of numeric literals: integer and floating. Integer literals may be given in decimal (the
default), octal (prefixed by <span
class="pcrr7t-">0o</span> or <span
class="pcrr7t-">0O</span>) or hexadecimal notation (prefixed by <span
class="pcrr7t-">0x</span> or <span
class="pcrr7t-">0X</span>). Floating literals are always
decimal. A floating literal must contain digits both before and after the decimal point; this ensures that a decimal
point cannot be mistaken for another use of the dot character. Negative numeric literals are discussed in Section&#x00A0;<a
href="haskellch3.html#x8-280003.4">3.4<!--tex4ht:ref: operators --></a>.
The typing of numeric literals is discussed in Section&#x00A0;<a
href="haskellch6.html#x13-1360006.4.1">6.4.1<!--tex4ht:ref: numeric-literals --></a>.
<p class="noindent">
<h3 class="sectionHead"><span class="titlemark">2.6 </span> <a
id="x7-200002.6"></a>Character and String Literals</h3>
<a
id="dx7-20001"></a>
<a
id="dx7-20002"></a>
<div class="flushleft"
>
<p class="noindent">
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-11" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-11-1g"><col
id="TBL-11-1" /><col
id="TBL-11-2" /><col
id="TBL-11-3" /><col
id="TBL-11-4" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-11-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-1-1"
class="td11"> <span
class="cmmi-10">char </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-11-1-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-1-3"
class="td11"> <span
class="pcrr7t-">'</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">(</span><span
class="cmmi-10">graphic</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="pcrr7t-">'</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">|</span><span
class="cmmi-7">&#x00A0;</span><span
class="pcrr7t-">\</span><span
class="cmsy-7">&#x27E9;</span></sub><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;space</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;escape</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="pcrr7t-">\&amp;</span><span
class="cmsy-7">&#x27E9;</span></sub><span
class="cmr-10">)</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">'</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-2-1"
class="td11"> <span
class="cmmi-10">string </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-11-2-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-2-3"
class="td11"> <span
class="pcrr7t-">"</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">graphic</span><sub><span
class="cmsy-7">&#x27E8;</span><span
class="pcrr7t-">"</span><span
class="cmmi-7">&#x00A0;</span><span
class="cmsy-7">|</span><span
class="cmmi-7">&#x00A0;</span><span
class="pcrr7t-">\</span><span
class="cmsy-7">&#x27E9;</span></sub><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;space</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;escape</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;gap</span><span
class="cmsy-10">}</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">"</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-3-1"
class="td11"> <span
class="cmmi-10">escape </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-11-3-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-3-3"
class="td11"> <span
class="pcrr7t-">\</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">(</span><span
class="cmmi-10">&#x00A0;charesc</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;ascii</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;decimal</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">o</span><span
class="cmmi-10">&#x00A0;octal</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">x</span><span
class="cmmi-10">&#x00A0;hexadecimal</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">) </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-4-1"
class="td11"> <span
class="cmmi-10">charesc </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-11-4-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-4-3"
class="td11"> <span
class="pcrr7t-">a</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">b</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">f</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">n</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">r</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">t</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">v</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">\</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">"</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">'</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">&amp;</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-5-1"
class="td11"> <span
class="cmmi-10">ascii </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-11-5-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-5-3"
class="td11"> <span
class="pcrr7t-">^</span><span
class="cmmi-10">cntrl</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">NUL</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">SOH</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">STX</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">ETX</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">EOT</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">ENQ</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">ACK</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-6-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-11-6-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-6-3"
class="td11"> <span
class="pcrr7t-">BEL</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">BS</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">HT</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">LF</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">VT</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">FF</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">CR</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">SO</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">SI</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">DLE</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-7-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-11-7-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-7-3"
class="td11"> <span
class="pcrr7t-">DC1</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">DC2</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">DC3</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">DC4</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">NAK</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">SYN</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">ETB</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">CAN</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-8-1"
class="td11"> </td><td style="white-space:nowrap; text-align:center;" id="TBL-11-8-2"
class="td11"> <span
class="cmsy-10">|</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-8-3"
class="td11"> <span
class="pcrr7t-">EM</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">SUB</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">ESC</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">FS</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">GS</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">RS</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">US</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">SP</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">DEL</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-9-1"
class="td11"> <span
class="cmmi-10">cntrl </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-11-9-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-9-3"
class="td11"> <span
class="cmmi-10">ascLarge</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmr-10">@</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">[</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">\</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">]</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">^</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">|</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">_</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-10-1"
class="td11"> <span
class="cmmi-10">gap </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-11-10-2"
class="td11"> <span
class="cmsy-10">&rarr;</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-11-10-3"
class="td11"> <span
class="pcrr7t-">\</span><span
class="cmmi-10">&#x00A0;whitechar</span><span
class="cmmi-10">&#x00A0;</span><span
class="cmsy-10">{</span><span
class="cmmi-10">whitechar</span><span
class="cmsy-10">}</span><span
class="cmmi-10">&#x00A0;</span><span
class="pcrr7t-">\</span> </td>
</tr></table></div></div>
<a
id="dx7-20003"></a>
<a
id="dx7-20004"></a>
<a
id="dx7-20005"></a>
<a
id="dx7-20006"></a>
<a
id="dx7-20007"></a>
<a
id="dx7-20008"></a>
<a
id="dx7-20009"></a>
<a
id="dx7-20010"></a>
<a
id="dx7-20011"></a>
<a
id="dx7-20012"></a>
<a
id="dx7-20013"></a>
<a
id="dx7-20014"></a>
<a
id="dx7-20015"></a>
<a
id="dx7-20016"></a>
<a
id="dx7-20017"></a>
<p class="noindent"> Character literals are written between single quotes, as in <span
class="pcrr7t-">'a'</span>, and strings between double quotes, as in
<span
class="pcrr7t-">"Hello"</span>.
<p class="noindent"> Escape codes may be used in characters and strings to represent special characters. Note that a single quote&#x00A0;<span
class="pcrr7t-">'</span> may
be used in a string, but must be escaped in a character; similarly, a double quote&#x00A0;<span
class="pcrr7t-">"</span> may be used in a character, but
must be escaped in a string. <span
class="pcrr7t-">\</span> must always be escaped. The category <span
class="cmmi-10">charesc</span> also includes portable representations
for the characters &#8220;alert&#8221; (<span
class="pcrr7t-">\a</span>), &#8220;backspace&#8221; (<span
class="pcrr7t-">\b</span>), &#8220;form feed&#8221; (<span
class="pcrr7t-">\f</span>), &#8220;new line&#8221; (<span
class="pcrr7t-">\n</span>), &#8220;carriage return&#8221; (<span
class="pcrr7t-">\r</span>),
&#8220;horizontal tab&#8221; (<span
class="pcrr7t-">\t</span>), and &#8220;vertical tab&#8221; (<span
class="pcrr7t-">\v</span>).
<p class="noindent"> Escape characters for the Unicode<a
id="dx7-20018"></a> character set, including control characters such as <span
class="pcrr7t-">\^X</span>, are also provided.
Numeric escapes such as <span
class="pcrr7t-">\137</span> are used to designate the character with decimal representation 137; octal
(e.g.&#x00A0;<span
class="pcrr7t-">\o137</span>) and hexadecimal (e.g.&#x00A0;<span
class="pcrr7t-">\x37</span>) representations are also allowed.
<p class="noindent"> Consistent with the &#8220;maximal munch&#8221; rule, <a
id="dx7-20019"></a>numeric escape characters in strings consist of all consecutive digits and
may be of arbitrary length. Similarly, the one ambiguous ASCII escape code, <span
class="pcrr7t-">"\SOH"</span>, is parsed as a string of length
1. The escape character <span
class="pcrr7t-">\&amp;</span> is provided as a &#8220;null character&#8221; to allow strings such as <span
class="pcrr7t-">"\137\&amp;9"</span> and <span
class="pcrr7t-">"\SO\&amp;H"</span> to
be constructed (both of length two). Thus <span
class="pcrr7t-">"\&amp;"</span> is equivalent to <span
class="pcrr7t-">""</span> and the character <span
class="pcrr7t-">'\&amp;'</span>&#x00A0;is disallowed. Further
equivalences of characters are defined in Section&#x00A0;<a
href="haskellch6.html#x13-1190006.1.2">6.1.2<!--tex4ht:ref: characters --></a>.
<p class="noindent"> A string may include a &#8220;gap&#8221;&#8212;two backslants enclosing white characters&#8212;which is ignored. This allows one to
write long strings on more than one line by writing a backslant at the end of one line and at the start of the next. For
example,
<div class="quote">
<div class="verbatim" id="verbatim-2">
"Here&#x00A0;is&#x00A0;a&#x00A0;backslant&#x00A0;\\&#x00A0;as&#x00A0;well&#x00A0;as&#x00A0;\137,&#x00A0;\
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;\a&#x00A0;numeric&#x00A0;escape&#x00A0;character,&#x00A0;and&#x00A0;\^X,&#x00A0;a&#x00A0;control&#x00A0;character."
</div>
<p class="noindent"></div>
<p class="noindent"> String literals are actually abbreviations for lists of characters (see Section&#x00A0;<a
href="haskellch3.html#x8-340003.7">3.7<!--tex4ht:ref: lists --></a>).
<p class="noindent">
<h3 class="sectionHead"><span class="titlemark">2.7 </span> <a
id="x7-210002.7"></a>Layout</h3>
<a
id="dx7-21001"></a>
<p class="noindent"> Haskell permits the omission of the braces and semicolons used in several grammar productions, by using <span
class="ptmri7t-">layout </span>to
convey the same information. This allows both layout-sensitive and layout-insensitive styles of coding, which can be
freely mixed within one program. Because layout is not required, Haskell programs can be straightforwardly
produced by other programs.
<p class="noindent"> The effect of layout on the meaning of a Haskell program can be completely specified by adding braces and
semicolons in places determined by the layout. The meaning of this augmented program is now layout
insensitive.
<p class="noindent"> Informally stated, the braces and semicolons are inserted as follows. The layout (or &#8220;off-side&#8221;) rule<a
id="dx7-21002"></a> takes effect
whenever the open brace is omitted after the keyword <span
class="pcrr7t-">where</span>, <span
class="pcrr7t-">let</span>, <span
class="pcrr7t-">do</span>, or <span
class="pcrr7t-">of</span>. When this happens, the indentation of
the next lexeme (whether or not on a new line) is remembered and the omitted open brace is inserted (the whitespace
preceding the lexeme may include comments). For each subsequent line, if it contains only whitespace or is indented
more, then the previous item is continued (nothing is inserted); if it is indented the same amount, then a new
item begins (a semicolon is inserted); and if it is indented less, then the layout list ends (a close brace
is inserted). If the indentation of the non-brace lexeme immediately following a <span
class="pcrr7t-">where</span>, <span
class="pcrr7t-">let</span>, <span
class="pcrr7t-">do</span> or
<span
class="pcrr7t-">of</span> is less than or equal to the current indentation level, then instead of starting a layout, an empty list
&#8220;<span
class="pcrr7t-">{}</span>&#8221; is inserted, and layout processing occurs for the current level (i.e. insert a semicolon or close
brace). A close brace is also inserted whenever the syntactic category containing the layout list ends; that
is, if an illegal lexeme is encountered at a point where a close brace would be legal, a close brace is
inserted. The layout rule matches only those open braces that it has inserted; an explicit open brace
must be matched by an explicit close brace. Within these explicit open braces, <span
class="ptmri7t-">no </span>layout processing is
performed for constructs outside the braces, even if a line is indented to the left of an earlier implicit open
brace.
<p class="noindent"> Section&#x00A0;<a
href="haskellch10.html#x17-17800010.3">10.3<!--tex4ht:ref: layout --></a> gives a more precise definition of the layout rules.
<p class="noindent"> Given these rules, a single newline may actually terminate several layout lists. Also, these rules permit:
<div class="quote">
<div class="verbatim" id="verbatim-3">
f&#x00A0;x&#x00A0;=&#x00A0;let&#x00A0;a&#x00A0;=&#x00A0;1;&#x00A0;b&#x00A0;=&#x00A0;2
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;g&#x00A0;y&#x00A0;=&#x00A0;exp2
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;in&#x00A0;exp1
</div>
<p class="noindent"></div>
<p class="noindent"> making <span
class="pcrr7t-">a</span>, <span
class="pcrr7t-">b</span> and <span
class="pcrr7t-">g</span> all part of the same layout list.
<p class="noindent"> As an example, Figure&#x00A0;<a
href="#x7-210031">2.1<!--tex4ht:ref: layout-before --></a> shows a (somewhat contrived) module and Figure&#x00A0;<a
href="#x7-210042">2.2<!--tex4ht:ref: layout-after --></a> shows the result of applying the
layout rule to it. Note in particular: (a)&#x00A0;the line beginning <span
class="pcrr7t-">}};pop</span>, where the termination of the previous line
invokes three applications of the layout rule, corresponding to the depth (3) of the nested <span
class="pcrr7t-">where</span> clauses, (b)&#x00A0;the
close braces in the <span
class="pcrr7t-">where</span> clause nested within the tuple and <span
class="pcrr7t-">case</span> expression, inserted because the end of the tuple
was detected, and (c)&#x00A0;the close brace at the very end, inserted because of the column 0 indentation of the end-of-file
token.
<hr class="figure" /><div class="figure"
>
<a
id="x7-210031"></a><a
id="x7-210042"></a>
<div class="center"
>
<p class="noindent">
<div class="fbox"><div class="minipage"><div class="verbatim" id="verbatim-4">
module&#x00A0;AStack(&#x00A0;Stack,&#x00A0;push,&#x00A0;pop,&#x00A0;top,&#x00A0;size&#x00A0;)&#x00A0;where
&#x00A0;<br />data&#x00A0;Stack&#x00A0;a&#x00A0;=&#x00A0;Empty
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;MkStack&#x00A0;a&#x00A0;(Stack&#x00A0;a)
&#x00A0;<br />
&#x00A0;<br />push&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Stack&#x00A0;a
&#x00A0;<br />push&#x00A0;x&#x00A0;s&#x00A0;=&#x00A0;MkStack&#x00A0;x&#x00A0;s
&#x00A0;<br />
&#x00A0;<br />size&#x00A0;::&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Int
&#x00A0;<br />size&#x00A0;s&#x00A0;=&#x00A0;length&#x00A0;(stkToLst&#x00A0;s)&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;stkToLst&#x00A0;&#x00A0;Empty&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;stkToLst&#x00A0;(MkStack&#x00A0;x&#x00A0;s)&#x00A0;&#x00A0;=&#x00A0;x:xs&#x00A0;where&#x00A0;xs&#x00A0;=&#x00A0;stkToLst&#x00A0;s
&#x00A0;<br />
&#x00A0;<br />pop&#x00A0;::&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(a,&#x00A0;Stack&#x00A0;a)
&#x00A0;<br />pop&#x00A0;(MkStack&#x00A0;x&#x00A0;s)
&#x00A0;<br />&#x00A0;&#x00A0;=&#x00A0;(x,&#x00A0;case&#x00A0;s&#x00A0;of&#x00A0;r&#x00A0;-&#x003E;&#x00A0;i&#x00A0;r&#x00A0;where&#x00A0;i&#x00A0;x&#x00A0;=&#x00A0;x)&#x00A0;--&#x00A0;(pop&#x00A0;Empty)&#x00A0;is&#x00A0;an&#x00A0;error
&#x00A0;<br />
&#x00A0;<br />top&#x00A0;::&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />top&#x00A0;(MkStack&#x00A0;x&#x00A0;s)&#x00A0;=&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;(top&#x00A0;Empty)&#x00A0;is&#x00A0;an&#x00A0;error
</div>
<p class="noindent"> </div></div>
</div>
<br /><div class="caption"
><span class="id">Figure&#x00A0;2.1: </span><span
class="content">A sample program</span></div><!--tex4ht:label?: x7-210031 -->
<div class="center"
>
<p class="noindent">
<div class="fbox"><div class="minipage"><div class="verbatim" id="verbatim-5">
module&#x00A0;AStack(&#x00A0;Stack,&#x00A0;push,&#x00A0;pop,&#x00A0;top,&#x00A0;size&#x00A0;)&#x00A0;where
&#x00A0;<br />{data&#x00A0;Stack&#x00A0;a&#x00A0;=&#x00A0;Empty
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;MkStack&#x00A0;a&#x00A0;(Stack&#x00A0;a)
&#x00A0;<br />
&#x00A0;<br />;push&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Stack&#x00A0;a
&#x00A0;<br />;push&#x00A0;x&#x00A0;s&#x00A0;=&#x00A0;MkStack&#x00A0;x&#x00A0;s
&#x00A0;<br />
&#x00A0;<br />;size&#x00A0;::&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Int
&#x00A0;<br />;size&#x00A0;s&#x00A0;=&#x00A0;length&#x00A0;(stkToLst&#x00A0;s)&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;{stkToLst&#x00A0;&#x00A0;Empty&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;;stkToLst&#x00A0;(MkStack&#x00A0;x&#x00A0;s)&#x00A0;&#x00A0;=&#x00A0;x:xs&#x00A0;where&#x00A0;{xs&#x00A0;=&#x00A0;stkToLst&#x00A0;s
&#x00A0;<br />
&#x00A0;<br />}};pop&#x00A0;::&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(a,&#x00A0;Stack&#x00A0;a)
&#x00A0;<br />;pop&#x00A0;(MkStack&#x00A0;x&#x00A0;s)
&#x00A0;<br />&#x00A0;&#x00A0;=&#x00A0;(x,&#x00A0;case&#x00A0;s&#x00A0;of&#x00A0;{r&#x00A0;-&#x003E;&#x00A0;i&#x00A0;r&#x00A0;where&#x00A0;{i&#x00A0;x&#x00A0;=&#x00A0;x}})&#x00A0;--&#x00A0;(pop&#x00A0;Empty)&#x00A0;is&#x00A0;an&#x00A0;error
&#x00A0;<br />
&#x00A0;<br />;top&#x00A0;::&#x00A0;Stack&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />;top&#x00A0;(MkStack&#x00A0;x&#x00A0;s)&#x00A0;=&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;(top&#x00A0;Empty)&#x00A0;is&#x00A0;an&#x00A0;error
&#x00A0;<br />}
</div>
<p class="noindent"> </div></div>
</div>
<div class="caption"
><span class="id">Figure&#x00A0;2.2: </span><span
class="content">Sample program with layout expanded</span></div><!--tex4ht:label?: x7-210042 -->
</div><hr class="endfigure" />
<!--l. 7--><div class="crosslinks"><p class="noindent">[<a
href="haskellch3.html" >next</a>] [<a
href="haskellch1.html" >prev</a>] [<a
href="haskellch1.html#tailhaskellch1.html" >prev-tail</a>] [<a
href="haskellch2.html" >front</a>] [<a
href="haskellpa1.html#haskellch2.html" >up</a>] </p></div>
<p class="noindent"> <a
id="tailhaskellch2.html"></a>
</body></html>