2384 lines
108 KiB
HTML
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 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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">⟨</span><span
|
|
class="cmmi-7">pat</span><span
|
|
class="cmsy-7">′⟩</span></sub> </div></td><td style="white-space:nowrap; text-align:left;"
|
|
><div class="td11"> difference—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">′</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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> alt</span><sub><span
|
|
class="cmr-7">2</span></sub><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmmi-10">…</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">…</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">→</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"> lexeme</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> whitespace</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> qconid</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> qvarsym</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> special</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> reservedop</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> float</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> char</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">)</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">,</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">;</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">[</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">]</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">`</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">{</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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-">  </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">→</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"> </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> comment</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> vertab</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> space</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> tab</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> linefeed</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> return</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> linefeed</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-13-3"
|
|
class="td11"> a carriage 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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-14-3"
|
|
class="td11"> a line 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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-15-3"
|
|
class="td11"> a vertical 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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-16-3"
|
|
class="td11"> a form 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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-17-3"
|
|
class="td11"> a 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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-18-3"
|
|
class="td11"> a horizontal 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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-19-3"
|
|
class="td11"> any Unicode character defined as 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-">  </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">→</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"> </span><span
|
|
class="cmr-10">[</span><span
|
|
class="cmmi-10"> any</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="cmmi-7">symbol</span><span
|
|
class="cmsy-7">⟩</span></sub><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">{</span><span
|
|
class="cmmi-10">any</span><span
|
|
class="cmsy-10">}</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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">→</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"> </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">→</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">→</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">→</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"> ANY seq</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">{</span><span
|
|
class="cmmi-10">ncomment</span><span
|
|
class="cmmi-10"> ANY seq</span><span
|
|
class="cmsy-10">}</span><span
|
|
class="cmmi-10"> 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">→</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">⟨{</span><span
|
|
class="cmmi-7">ANY </span><span
|
|
class="cmsy-7">}</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmr-7">(</span><span
|
|
class="cmmi-7"> opencom</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">|</span><span
|
|
class="cmmi-7"> closecom</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmr-7">)</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">{</span><span
|
|
class="cmmi-7">ANY </span><span
|
|
class="cmsy-7">}⟩</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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> space</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> large</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> symbol</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> digit</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> special</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">"</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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-">  </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> uniSmall</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">b</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmmi-10">…</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-35-3"
|
|
class="td11"> any Unicode lowercase 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-">  </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">B</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmmi-10">…</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-40-3"
|
|
class="td11"> any uppercase or titlecase Unicode 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> uniSymbol</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="cmmi-7">special</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">|</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="pcrr7t-">_</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">|</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="pcrr7t-">"</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">|</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="pcrr7t-">'</span><span
|
|
class="cmsy-7">⟩</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-">  </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">#</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">$</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">%</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">&</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">⋆</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">+</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">/</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-"><</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">=</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">></span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">?</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">^</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">-</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">~</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-46-3"
|
|
class="td11"> any Unicode symbol or 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">1</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmmi-10">…</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-3-49-3"
|
|
class="td11"> any Unicode decimal 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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">1</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmmi-10">…</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">A</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmmi-10">…</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">F</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">a</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmmi-10">…</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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-">  </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 “maximal munch” 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, “<span
|
|
class="pcrr7t-">--></span>” or
|
|
“<span
|
|
class="pcrr7t-">|--</span>” do <span
|
|
class="ptmri7t-">not </span>begin a comment, because both of these are legal lexemes; however “<span
|
|
class="pcrr7t-">--foo</span>” does start a
|
|
comment.
|
|
<p class="noindent"> A nested comment<a
|
|
id="dx7-17003"></a> begins with “<span
|
|
class="pcrr7t-">{-</span>” and ends with “<span
|
|
class="pcrr7t-">-}</span>”. No legal lexeme starts with “<span
|
|
class="pcrr7t-">{-</span>”; hence, for example,
|
|
“<span
|
|
class="pcrr7t-">{---</span>” 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 “<span
|
|
class="pcrr7t-">-}</span>” terminates
|
|
the nested comment. Nested comments may be nested to any depth: any occurrence of the string “<span
|
|
class="pcrr7t-">{-</span>” within the
|
|
nested comment starts a new nested comment, terminated by “<span
|
|
class="pcrr7t-">-}</span>”. Within a nested comment, each “<span
|
|
class="pcrr7t-">{-</span>” is matched
|
|
by a corresponding occurrence of “<span
|
|
class="pcrr7t-">-}</span>”.
|
|
<p class="noindent"> In an ordinary comment, the character sequences “<span
|
|
class="pcrr7t-">{-</span>” and “<span
|
|
class="pcrr7t-">-}</span>” 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 <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">→</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"> </span><span
|
|
class="cmsy-10">{</span><span
|
|
class="cmmi-10">small</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> large</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> digit</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">'</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">}</span><span
|
|
class="cmr-10">)</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="cmmi-7">reservedid</span><span
|
|
class="cmsy-7">⟩</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">→</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"> </span><span
|
|
class="cmsy-10">{</span><span
|
|
class="cmmi-10">small</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> large</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> digit</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">'</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">class</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">data</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">default</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">deriving</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">do</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">if</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">import</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">in</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">infix</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">instance</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">let</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">module</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">newtype</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">type</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">where</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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 <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, “<span
|
|
class="pcrr7t-">_</span>”, is treated as a lowercase letter, and can occur wherever a lowercase letter can. However, “<span
|
|
class="pcrr7t-">_</span>” 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
|
|
“<span
|
|
class="pcrr7t-">_foo</span>” 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">→</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"> </span><span
|
|
class="cmmi-10">symbol</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="pcrr7t-">:</span><span
|
|
class="cmsy-7">⟩</span></sub><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">{</span><span
|
|
class="cmmi-10">symbol</span><span
|
|
class="cmsy-10">}</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmr-10">)</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="cmmi-7">reservedop</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">|</span><span
|
|
class="cmmi-7"> dashes</span><span
|
|
class="cmsy-7">⟩</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">→</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"> </span><span
|
|
class="pcrr7t-">:</span><span
|
|
class="cmmi-10"> </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">⟨</span><span
|
|
class="cmmi-7">reservedop</span><span
|
|
class="cmsy-7">⟩</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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">:</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">::</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">=</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">\</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-"><-</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">-></span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span class="obeylines-h"><span class="verb"><span
|
|
class="pcrr7t-">@</span></span></span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">~</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">=></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 <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, “<span
|
|
class="pcrr7t-">:</span>”, is reserved solely for use as the Haskell list constructor; this makes its treatment
|
|
uniform with other parts of list syntax, such as “<span
|
|
class="pcrr7t-">[]</span>” and “<span
|
|
class="pcrr7t-">[a,b]</span>”.
|
|
<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 <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-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-">  </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-1-3"
|
|
class="td11"> <span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </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-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-">  </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-2-3"
|
|
class="td11"> <span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </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">→</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-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="cmr-10">(</span>type 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">→</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-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="cmr-10">(</span>type 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">→</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-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="cmr-10">(</span>type 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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmsy-10">}</span><span
|
|
class="cmmi-10"> conid</span> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-6-4"
|
|
class="td11"> <span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </span><span
|
|
class="ptmri7t-"> </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 <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 <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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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-"> .</span><span
|
|
class="pcrr7t-"> 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 ‘g’) </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-"> ..</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 ‘.’) </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-"> .</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 <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">→</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">→</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">→</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">→</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"> octal</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">0O</span><span
|
|
class="cmmi-10"> 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"> hexadecimal</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">0X</span><span
|
|
class="cmmi-10"> 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-">  </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-">  </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">→</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"> </span><span
|
|
class="pcrr7t-">.</span><span
|
|
class="cmmi-10"> decimal</span><span
|
|
class="cmmi-10"> </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"> 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-">  </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">E</span><span
|
|
class="cmr-10">)</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmr-10">[</span><span
|
|
class="pcrr7t-">+</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">-</span><span
|
|
class="cmr-10">]</span><span
|
|
class="cmmi-10"> 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 <a
|
|
href="haskellch3.html#x8-280003.4">3.4<!--tex4ht:ref: operators --></a>.
|
|
The typing of numeric literals is discussed in Section <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">→</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"> </span><span
|
|
class="cmr-10">(</span><span
|
|
class="cmmi-10">graphic</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="pcrr7t-">'</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">|</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="pcrr7t-">\</span><span
|
|
class="cmsy-7">⟩</span></sub><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> space</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> escape</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="pcrr7t-">\&</span><span
|
|
class="cmsy-7">⟩</span></sub><span
|
|
class="cmr-10">)</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmsy-10">{</span><span
|
|
class="cmmi-10">graphic</span><sub><span
|
|
class="cmsy-7">⟨</span><span
|
|
class="pcrr7t-">"</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="cmsy-7">|</span><span
|
|
class="cmmi-7"> </span><span
|
|
class="pcrr7t-">\</span><span
|
|
class="cmsy-7">⟩</span></sub><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> space</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> escape</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> gap</span><span
|
|
class="cmsy-10">}</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmr-10">(</span><span
|
|
class="cmmi-10"> charesc</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> ascii</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> decimal</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">o</span><span
|
|
class="cmmi-10"> octal</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">x</span><span
|
|
class="cmmi-10"> hexadecimal</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">b</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">f</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">n</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">r</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">t</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">v</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">\</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">"</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">'</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">&</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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">NUL</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">SOH</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">STX</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">ETX</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">EOT</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">ENQ</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">BS</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">HT</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">LF</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">VT</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">FF</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">CR</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">SO</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">SI</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">DC2</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">DC3</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">DC4</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">NAK</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">SYN</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">ETB</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">SUB</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">ESC</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">FS</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">GS</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">RS</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">US</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">SP</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</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"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmr-10">@</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">[</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">\</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">]</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="pcrr7t-">^</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">|</span><span
|
|
class="cmmi-10"> </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">→</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"> whitechar</span><span
|
|
class="cmmi-10"> </span><span
|
|
class="cmsy-10">{</span><span
|
|
class="cmmi-10">whitechar</span><span
|
|
class="cmsy-10">}</span><span
|
|
class="cmmi-10"> </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 <span
|
|
class="pcrr7t-">'</span> may
|
|
be used in a string, but must be escaped in a character; similarly, a double quote <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 “alert” (<span
|
|
class="pcrr7t-">\a</span>), “backspace” (<span
|
|
class="pcrr7t-">\b</span>), “form feed” (<span
|
|
class="pcrr7t-">\f</span>), “new line” (<span
|
|
class="pcrr7t-">\n</span>), “carriage return” (<span
|
|
class="pcrr7t-">\r</span>),
|
|
“horizontal tab” (<span
|
|
class="pcrr7t-">\t</span>), and “vertical tab” (<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. <span
|
|
class="pcrr7t-">\o137</span>) and hexadecimal (e.g. <span
|
|
class="pcrr7t-">\x37</span>) representations are also allowed.
|
|
<p class="noindent"> Consistent with the “maximal munch” 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-">\&</span> is provided as a “null character” to allow strings such as <span
|
|
class="pcrr7t-">"\137\&9"</span> and <span
|
|
class="pcrr7t-">"\SO\&H"</span> to
|
|
be constructed (both of length two). Thus <span
|
|
class="pcrr7t-">"\&"</span> is equivalent to <span
|
|
class="pcrr7t-">""</span> and the character <span
|
|
class="pcrr7t-">'\&'</span> is disallowed. Further
|
|
equivalences of characters are defined in Section <a
|
|
href="haskellch6.html#x13-1190006.1.2">6.1.2<!--tex4ht:ref: characters --></a>.
|
|
<p class="noindent"> A string may include a “gap”—two backslants enclosing white characters—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 is a backslant \\ as well as \137, \
|
|
 <br />    \a numeric escape character, and \^X, a control character."
|
|
</div>
|
|
<p class="noindent"></div>
|
|
<p class="noindent"> String literals are actually abbreviations for lists of characters (see Section <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 “off-side”) 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
|
|
“<span
|
|
class="pcrr7t-">{}</span>” 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 <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 x = let a = 1; b = 2
|
|
 <br />          g y = exp2
|
|
 <br />       in 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 <a
|
|
href="#x7-210031">2.1<!--tex4ht:ref: layout-before --></a> shows a (somewhat contrived) module and Figure <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) 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) 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) 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 AStack( Stack, push, pop, top, size ) where
|
|
 <br />data Stack a = Empty
|
|
 <br />             | MkStack a (Stack a)
|
|
 <br />
|
|
 <br />push :: a -> Stack a -> Stack a
|
|
 <br />push x s = MkStack x s
|
|
 <br />
|
|
 <br />size :: Stack a -> Int
|
|
 <br />size s = length (stkToLst s)  where
|
|
 <br />           stkToLst  Empty         = []
|
|
 <br />           stkToLst (MkStack x s)  = x:xs where xs = stkToLst s
|
|
 <br />
|
|
 <br />pop :: Stack a -> (a, Stack a)
|
|
 <br />pop (MkStack x s)
|
|
 <br />  = (x, case s of r -> i r where i x = x) -- (pop Empty) is an error
|
|
 <br />
|
|
 <br />top :: Stack a -> a
|
|
 <br />top (MkStack x s) = x                     -- (top Empty) is an error
|
|
</div>
|
|
<p class="noindent"> </div></div>
|
|
</div>
|
|
<br /><div class="caption"
|
|
><span class="id">Figure 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 AStack( Stack, push, pop, top, size ) where
|
|
 <br />{data Stack a = Empty
|
|
 <br />             | MkStack a (Stack a)
|
|
 <br />
|
|
 <br />;push :: a -> Stack a -> Stack a
|
|
 <br />;push x s = MkStack x s
|
|
 <br />
|
|
 <br />;size :: Stack a -> Int
|
|
 <br />;size s = length (stkToLst s)  where
|
|
 <br />           {stkToLst  Empty         = []
|
|
 <br />           ;stkToLst (MkStack x s)  = x:xs where {xs = stkToLst s
|
|
 <br />
|
|
 <br />}};pop :: Stack a -> (a, Stack a)
|
|
 <br />;pop (MkStack x s)
|
|
 <br />  = (x, case s of {r -> i r where {i x = x}}) -- (pop Empty) is an error
|
|
 <br />
|
|
 <br />;top :: Stack a -> a
|
|
 <br />;top (MkStack x s) = x                        -- (top Empty) is an error
|
|
 <br />}
|
|
</div>
|
|
<p class="noindent"> </div></div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="caption"
|
|
><span class="id">Figure 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>
|