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

2378 lines
201 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>9 Standard Prelude</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="haskellch10.html" >next</a>] [<a
href="haskellch8.html" >prev</a>] [<a
href="haskellch8.html#tailhaskellch8.html" >prev-tail</a>] [<a
href="#tailhaskellch9.html">tail</a>] [<a
href="haskellpa1.html#haskellch9.html" >up</a>] </p></div>
<h2 class="chapterHead"><span class="titlemark">Chapter&#x00A0;9</span><br /><a
id="x16-1710009"></a>Standard Prelude</h2>
<p class="noindent"> In this chapter the entire Haskell Prelude is given. It constitutes a <span
class="ptmri7t-">specification </span>for the Prelude. Many of the
definitions are written with clarity rather than efficiency in mind, and it is not required that the specification be
implemented as shown here.
<p class="noindent"> The default method definitions, given with <span
class="pcrr7t-">class</span> declarations, constitute a specification <span
class="ptmri7t-">only </span>of the default
method. They do not constitute a specification of the meaning of the method in all instances. To take one
particular example, the default method for <span
class="pcrr7t-">enumFrom</span> in class <span
class="pcrr7t-">Enum</span> will not work properly for types
whose range exceeds that of <span
class="pcrr7t-">Int</span> (because <span
class="pcrr7t-">fromEnum</span> cannot map all values in the type to distinct <span
class="pcrr7t-">Int</span>
values).
<p class="noindent"> The Prelude shown here is organized into a root module, <span
class="pcrr7t-">Prelude</span>, and three sub-modules, <span
class="pcrr7t-">PreludeList</span>,
<span
class="pcrr7t-">PreludeText</span>, and <span
class="pcrr7t-">PreludeIO</span>. This structure is purely presentational. An implementation is not required to use
this organisation for the Prelude, nor are these three modules available for import separately. Only the exports of
module <span
class="pcrr7t-">Prelude</span> are significant.
<p class="noindent"> Some of these modules import Library modules, such as <span
class="pcrr7t-">Data.Char</span>, <span
class="pcrr7t-">Control.Monad</span>, <span
class="pcrr7t-">System.IO</span>, and
<span
class="pcrr7t-">Numeric</span>. These modules are described fully in Part&#x00A0;<a
href="haskellpa2.html#x20-192000II">II<!--tex4ht:ref: libraries --></a>. These imports are not, of course, part of the specification of
the <span
class="pcrr7t-">Prelude</span>. That is, an implementation is free to import more, or less, of the Library modules, as it
pleases.
<p class="noindent"> Primitives that are not definable in Haskell, indicated by names starting with &#8220;<span
class="pcrr7t-">prim</span>&#8221;, are defined in a system
dependent manner in module <span
class="pcrr7t-">PreludeBuiltin</span> and are not shown here. Instance declarations that simply bind
primitives to class methods are omitted. Some of the more verbose instances with obvious functionality have been left
out for the sake of brevity.
<p class="noindent"> Declarations for special types such as <span
class="pcrr7t-">Integer</span>, or <span
class="pcrr7t-">()</span> are included in the Prelude for completeness even though
the declaration may be incomplete or syntactically invalid. An ellipsis &#8220;<span
class="pcrr7t-">...</span>&#8221; is often used in places where the
remainder of a definition cannot be given in Haskell.
<p class="noindent"> To reduce the occurrence of unexpected ambiguity errors, and to improve efficiency, a number of
commonly-used functions over lists use the <span
class="pcrr7t-">Int</span> type rather than using a more general numeric type, such as
<span
class="pcrr7t-">Integral</span><span
class="pcrr7t-">&#x00A0;a</span> or <span
class="pcrr7t-">Num</span><span
class="pcrr7t-">&#x00A0;a</span>. These functions are: <span
class="pcrr7t-">take</span>, <span
class="pcrr7t-">drop</span>, <span
class="pcrr7t-">!!</span>, <span
class="pcrr7t-">length</span>, <span
class="pcrr7t-">splitAt</span>, and <span
class="pcrr7t-">replicate</span>. The
more general versions are given in the <span
class="pcrr7t-">Data.List</span> library, with the prefix &#8220;<span
class="pcrr7t-">generic</span>&#8221;; for example
<span
class="pcrr7t-">genericLength</span>.
<p class="noindent">
<div class="verbatim" id="verbatim-161">
module&#x00A0;Prelude&#x00A0;(
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;module&#x00A0;PreludeList,&#x00A0;module&#x00A0;PreludeText,&#x00A0;module&#x00A0;PreludeIO,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Bool(False,&#x00A0;True),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Maybe(Nothing,&#x00A0;Just),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Either(Left,&#x00A0;Right),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Ordering(LT,&#x00A0;EQ,&#x00A0;GT),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Char,&#x00A0;String,&#x00A0;Int,&#x00A0;Integer,&#x00A0;Float,&#x00A0;Double,&#x00A0;Rational,&#x00A0;IO,
</div>
<p class="noindent"> <a
id="dx16-171001"></a>
<div class="verbatim" id="verbatim-162">
--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;These&#x00A0;built-in&#x00A0;types&#x00A0;are&#x00A0;defined&#x00A0;in&#x00A0;the&#x00A0;Prelude,&#x00A0;but
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;are&#x00A0;denoted&#x00A0;by&#x00A0;built-in&#x00A0;syntax,&#x00A0;and&#x00A0;cannot&#x00A0;legally
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;appear&#x00A0;in&#x00A0;an&#x00A0;export&#x00A0;list.
&#x00A0;<br />--&#x00A0;&#x00A0;List&#x00A0;type:&#x00A0;[]((:),&#x00A0;[])
&#x00A0;<br />--&#x00A0;&#x00A0;Tuple&#x00A0;types:&#x00A0;(,)((,)),&#x00A0;(,,)((,,)),&#x00A0;etc.
&#x00A0;<br />--&#x00A0;&#x00A0;Trivial&#x00A0;type:&#x00A0;()(())
&#x00A0;<br />--&#x00A0;&#x00A0;Functions:&#x00A0;(-&#x003E;)
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Eq((==),&#x00A0;(/=)),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Ord(compare,&#x00A0;(&#x003C;),&#x00A0;(&#x003C;=),&#x00A0;(&#x003E;=),&#x00A0;(&#x003E;),&#x00A0;max,&#x00A0;min),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Enum(succ,&#x00A0;pred,&#x00A0;toEnum,&#x00A0;fromEnum,&#x00A0;enumFrom,&#x00A0;enumFromThen,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromTo,&#x00A0;enumFromThenTo),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Bounded(minBound,&#x00A0;maxBound),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Num((+),&#x00A0;(-),&#x00A0;(&#x22C6;),&#x00A0;negate,&#x00A0;abs,&#x00A0;signum,&#x00A0;fromInteger),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Real(toRational),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Integral(quot,&#x00A0;rem,&#x00A0;div,&#x00A0;mod,&#x00A0;quotRem,&#x00A0;divMod,&#x00A0;toInteger),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Fractional((/),&#x00A0;recip,&#x00A0;fromRational),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Floating(pi,&#x00A0;exp,&#x00A0;log,&#x00A0;sqrt,&#x00A0;(&#x22C6;&#x22C6;),&#x00A0;logBase,&#x00A0;sin,&#x00A0;cos,&#x00A0;tan,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;asin,&#x00A0;acos,&#x00A0;atan,&#x00A0;sinh,&#x00A0;cosh,&#x00A0;tanh,&#x00A0;asinh,&#x00A0;acosh,&#x00A0;atanh),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;RealFrac(properFraction,&#x00A0;truncate,&#x00A0;round,&#x00A0;ceiling,&#x00A0;floor),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;RealFloat(floatRadix,&#x00A0;floatDigits,&#x00A0;floatRange,&#x00A0;decodeFloat,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;encodeFloat,&#x00A0;exponent,&#x00A0;significand,&#x00A0;scaleFloat,&#x00A0;isNaN,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;isInfinite,&#x00A0;isDenormalized,&#x00A0;isIEEE,&#x00A0;isNegativeZero,&#x00A0;atan2),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Monad((&#x003E;&#x003E;=),&#x00A0;(&#x003E;&#x003E;),&#x00A0;return,&#x00A0;fail),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Functor(fmap),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;mapM,&#x00A0;mapM_,&#x00A0;sequence,&#x00A0;sequence_,&#x00A0;(=&#x003C;&#x003C;),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;maybe,&#x00A0;either,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(&amp;&amp;),&#x00A0;(||),&#x00A0;not,&#x00A0;otherwise,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;subtract,&#x00A0;even,&#x00A0;odd,&#x00A0;gcd,&#x00A0;lcm,&#x00A0;(^),&#x00A0;(^^),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromIntegral,&#x00A0;realToFrac,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fst,&#x00A0;snd,&#x00A0;curry,&#x00A0;uncurry,&#x00A0;id,&#x00A0;const,&#x00A0;(.),&#x00A0;flip,&#x00A0;($),&#x00A0;until,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;asTypeOf,&#x00A0;error,&#x00A0;undefined,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;seq,&#x00A0;($!)
&#x00A0;<br />&#x00A0;&#x00A0;)&#x00A0;where
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-163">
import&#x00A0;PreludeBuiltin&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Contains&#x00A0;all&#x00A0;&#8216;prim'&#x00A0;values
&#x00A0;<br />import&#x00A0;UnicodePrims(&#x00A0;primUnicodeMaxChar&#x00A0;)&#x00A0;&#x00A0;--&#x00A0;Unicode&#x00A0;primitives
&#x00A0;<br />import&#x00A0;PreludeList
&#x00A0;<br />import&#x00A0;PreludeText
&#x00A0;<br />import&#x00A0;PreludeIO
&#x00A0;<br />import&#x00A0;Data.Ratio(&#x00A0;Rational&#x00A0;)
</div>
<p class="noindent"> <a
id="dx16-171002"></a><a
id="dx16-171003"></a>
<div class="verbatim" id="verbatim-164">
infixr&#x00A0;9&#x00A0;&#x00A0;.
&#x00A0;<br />infixr&#x00A0;8&#x00A0;&#x00A0;^,&#x00A0;^^,&#x00A0;&#x22C6;&#x22C6;
&#x00A0;<br />infixl&#x00A0;7&#x00A0;&#x00A0;&#x22C6;,&#x00A0;/,&#x00A0;&#8216;quot&#8216;,&#x00A0;&#8216;rem&#8216;,&#x00A0;&#8216;div&#8216;,&#x00A0;&#8216;mod&#8216;
&#x00A0;<br />infixl&#x00A0;6&#x00A0;&#x00A0;+,&#x00A0;-
</div>
<p class="noindent"> <a
id="dx16-171004"></a><a
id="dx16-171005"></a><a
id="dx16-171006"></a><a
id="dx16-171007"></a><a
id="dx16-171008"></a><a
id="dx16-171009"></a><a
id="dx16-171010"></a><a
id="dx16-171011"></a><a
id="dx16-171012"></a><a
id="dx16-171013"></a><a
id="dx16-171014"></a><a
id="dx16-171015"></a>
<div class="verbatim" id="verbatim-165">
--&#x00A0;The&#x00A0;(:)&#x00A0;operator&#x00A0;is&#x00A0;built-in&#x00A0;syntax,&#x00A0;and&#x00A0;cannot&#x00A0;legally&#x00A0;be&#x00A0;given
&#x00A0;<br />--&#x00A0;a&#x00A0;fixity&#x00A0;declaration;&#x00A0;but&#x00A0;its&#x00A0;fixity&#x00A0;is&#x00A0;given&#x00A0;by:
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;infixr&#x00A0;5&#x00A0;&#x00A0;:
&#x00A0;<br />
&#x00A0;<br />infix&#x00A0;&#x00A0;4&#x00A0;&#x00A0;==,&#x00A0;/=,&#x00A0;&#x003C;,&#x00A0;&#x003C;=,&#x00A0;&#x003E;=,&#x00A0;&#x003E;
&#x00A0;<br />infixr&#x00A0;3&#x00A0;&#x00A0;&amp;&amp;
&#x00A0;<br />infixr&#x00A0;2&#x00A0;&#x00A0;||
&#x00A0;<br />infixl&#x00A0;1&#x00A0;&#x00A0;&#x003E;&#x003E;,&#x00A0;&#x003E;&#x003E;=
&#x00A0;<br />infixr&#x00A0;1&#x00A0;&#x00A0;=&#x003C;&#x003C;
&#x00A0;<br />infixr&#x00A0;0&#x00A0;&#x00A0;$,&#x00A0;$!,&#x00A0;&#8216;seq&#8216;
</div>
<p class="noindent"> <a
id="dx16-171016"></a><a
id="dx16-171017"></a><a
id="dx16-171018"></a><a
id="dx16-171019"></a><a
id="dx16-171020"></a><a
id="dx16-171021"></a><a
id="dx16-171022"></a><a
id="dx16-171023"></a><a
id="dx16-171024"></a><a
id="dx16-171025"></a><a
id="dx16-171026"></a><a
id="dx16-171027"></a><a
id="dx16-171028"></a><a
id="dx16-171029"></a>
<div class="verbatim" id="verbatim-166">
--&#x00A0;Standard&#x00A0;types,&#x00A0;classes,&#x00A0;instances&#x00A0;and&#x00A0;related&#x00A0;functions
&#x00A0;<br />
&#x00A0;<br />--&#x00A0;Equality&#x00A0;and&#x00A0;Ordered&#x00A0;classes
&#x00A0;<br />
&#x00A0;<br />class&#x00A0;&#x00A0;Eq&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(==),&#x00A0;(/=)&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(==)&#x00A0;or&#x00A0;(/=)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;/=&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;not&#x00A0;(x&#x00A0;==&#x00A0;y)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;==&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;not&#x00A0;(x&#x00A0;/=&#x00A0;y)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-167">
class&#x00A0;&#x00A0;(Eq&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Ord&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;compare&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Ordering
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(&#x003C;),&#x00A0;(&#x003C;=),&#x00A0;(&#x003E;=),&#x00A0;(&#x003E;)&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;max,&#x00A0;min&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(&#x003C;=)&#x00A0;or&#x00A0;compare
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Using&#x00A0;compare&#x00A0;can&#x00A0;be&#x00A0;more&#x00A0;efficient&#x00A0;for&#x00A0;complex&#x00A0;types.
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;compare&#x00A0;x&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x&#x00A0;==&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;EQ
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x&#x00A0;&#x003C;=&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;LT
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;&#x00A0;GT
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;&#x003C;=&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;compare&#x00A0;x&#x00A0;y&#x00A0;/=&#x00A0;GT
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;&#x003C;&#x00A0;&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;compare&#x00A0;x&#x00A0;y&#x00A0;==&#x00A0;LT
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;&#x003E;=&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;compare&#x00A0;x&#x00A0;y&#x00A0;/=&#x00A0;LT
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;&#x003E;&#x00A0;&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;compare&#x00A0;x&#x00A0;y&#x00A0;==&#x00A0;GT
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-168">
--&#x00A0;note&#x00A0;that&#x00A0;(min&#x00A0;x&#x00A0;y,&#x00A0;max&#x00A0;x&#x00A0;y)&#x00A0;=&#x00A0;(x,y)&#x00A0;or&#x00A0;(y,x)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;max&#x00A0;x&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x&#x00A0;&#x003C;=&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;min&#x00A0;x&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x&#x00A0;&#x003C;=&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;&#x00A0;y
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-169">
--&#x00A0;Enumeration&#x00A0;and&#x00A0;Bounded&#x00A0;classes
&#x00A0;<br />
&#x00A0;<br />class&#x00A0;&#x00A0;Enum&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;succ,&#x00A0;pred&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;toEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Int
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFrom&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;[n..]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThen&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;[n,n'..]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromTo&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;[n..m]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThenTo&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;&#x00A0;&#x00A0;--&#x00A0;[n,n'..m]
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;toEnum,&#x00A0;fromEnum
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;NOTE:&#x00A0;these&#x00A0;default&#x00A0;methods&#x00A0;only&#x00A0;make&#x00A0;sense&#x00A0;for&#x00A0;types
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;that&#x00A0;map&#x00A0;injectively&#x00A0;into&#x00A0;Int&#x00A0;using&#x00A0;fromEnum
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;and&#x00A0;toEnum.
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;succ&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;toEnum&#x00A0;.&#x00A0;(+1)&#x00A0;.&#x00A0;fromEnum
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;pred&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;toEnum&#x00A0;.&#x00A0;(subtract&#x00A0;1)&#x00A0;.&#x00A0;fromEnum
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFrom&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;map&#x00A0;toEnum&#x00A0;[fromEnum&#x00A0;x&#x00A0;..]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromTo&#x00A0;x&#x00A0;y&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;map&#x00A0;toEnum&#x00A0;[fromEnum&#x00A0;x&#x00A0;..&#x00A0;fromEnum&#x00A0;y]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThen&#x00A0;x&#x00A0;y&#x00A0;=&#x00A0;&#x00A0;map&#x00A0;toEnum&#x00A0;[fromEnum&#x00A0;x,&#x00A0;fromEnum&#x00A0;y&#x00A0;..]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThenTo&#x00A0;x&#x00A0;y&#x00A0;z&#x00A0;=
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;map&#x00A0;toEnum&#x00A0;[fromEnum&#x00A0;x,&#x00A0;fromEnum&#x00A0;y&#x00A0;..&#x00A0;fromEnum&#x00A0;z]
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-170">
class&#x00A0;&#x00A0;Bounded&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;minBound&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;maxBound&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-171">
--&#x00A0;Numeric&#x00A0;classes
&#x00A0;<br />
&#x00A0;<br />class&#x00A0;&#x00A0;(Eq&#x00A0;a,&#x00A0;Show&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Num&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(+),&#x00A0;(-),&#x00A0;(&#x22C6;)&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;negate&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;abs,&#x00A0;signum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromInteger&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Integer&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;All,&#x00A0;except&#x00A0;negate&#x00A0;or&#x00A0;(-)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;-&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;+&#x00A0;negate&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;negate&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;0&#x00A0;-&#x00A0;x
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-172">
class&#x00A0;&#x00A0;(Num&#x00A0;a,&#x00A0;Ord&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Real&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;toRational&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Rational
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-173">
class&#x00A0;&#x00A0;(Real&#x00A0;a,&#x00A0;Enum&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Integral&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;quot,&#x00A0;rem&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;div,&#x00A0;mod&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;quotRem,&#x00A0;divMod&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(a,a)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;toInteger&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Integer
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;quotRem,&#x00A0;toInteger
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;n&#x00A0;&#8216;quot&#8216;&#x00A0;d&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;q&#x00A0;&#x00A0;where&#x00A0;(q,r)&#x00A0;=&#x00A0;quotRem&#x00A0;n&#x00A0;d
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;n&#x00A0;&#8216;rem&#8216;&#x00A0;d&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;r&#x00A0;&#x00A0;where&#x00A0;(q,r)&#x00A0;=&#x00A0;quotRem&#x00A0;n&#x00A0;d
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;n&#x00A0;&#8216;div&#8216;&#x00A0;d&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;q&#x00A0;&#x00A0;where&#x00A0;(q,r)&#x00A0;=&#x00A0;divMod&#x00A0;n&#x00A0;d
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;n&#x00A0;&#8216;mod&#8216;&#x00A0;d&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;r&#x00A0;&#x00A0;where&#x00A0;(q,r)&#x00A0;=&#x00A0;divMod&#x00A0;n&#x00A0;d
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;divMod&#x00A0;n&#x00A0;d&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;if&#x00A0;signum&#x00A0;r&#x00A0;==&#x00A0;-&#x00A0;signum&#x00A0;d&#x00A0;then&#x00A0;(q-1,&#x00A0;r+d)&#x00A0;else&#x00A0;qr
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;qr@(q,r)&#x00A0;=&#x00A0;quotRem&#x00A0;n&#x00A0;d
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-174">
class&#x00A0;&#x00A0;(Num&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Fractional&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(/)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;recip&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromRational&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Rational&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromRational&#x00A0;and&#x00A0;(recip&#x00A0;or&#x00A0;(/))
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;recip&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;1&#x00A0;/&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;/&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;&#x22C6;&#x00A0;recip&#x00A0;y
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-175">
class&#x00A0;&#x00A0;(Fractional&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Floating&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;pi&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;exp,&#x00A0;log,&#x00A0;sqrt&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(&#x22C6;&#x22C6;),&#x00A0;logBase&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;sin,&#x00A0;cos,&#x00A0;tan&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;asin,&#x00A0;acos,&#x00A0;atan&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;sinh,&#x00A0;cosh,&#x00A0;tanh&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;asinh,&#x00A0;acosh,&#x00A0;atanh&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;pi,&#x00A0;exp,&#x00A0;log,&#x00A0;sin,&#x00A0;cos,&#x00A0;sinh,&#x00A0;cosh
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;asin,&#x00A0;acos,&#x00A0;atan
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;asinh,&#x00A0;acosh,&#x00A0;atanh
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;x&#x00A0;&#x22C6;&#x22C6;&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;exp&#x00A0;(log&#x00A0;x&#x00A0;&#x22C6;&#x00A0;y)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;logBase&#x00A0;x&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;log&#x00A0;y&#x00A0;/&#x00A0;log&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;sqrt&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;&#x22C6;&#x22C6;&#x00A0;0.5
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;tan&#x00A0;&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;sin&#x00A0;&#x00A0;x&#x00A0;/&#x00A0;cos&#x00A0;&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;tanh&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;sinh&#x00A0;x&#x00A0;/&#x00A0;cosh&#x00A0;x
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-176">
class&#x00A0;&#x00A0;(Real&#x00A0;a,&#x00A0;Fractional&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;RealFrac&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;properFraction&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Integral&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(b,a)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;truncate,&#x00A0;round&#x00A0;&#x00A0;::&#x00A0;(Integral&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;ceiling,&#x00A0;floor&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Integral&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;properFraction
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;truncate&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;m&#x00A0;&#x00A0;where&#x00A0;(m,_)&#x00A0;=&#x00A0;properFraction&#x00A0;x
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;round&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;let&#x00A0;(n,r)&#x00A0;=&#x00A0;properFraction&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;m&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;if&#x00A0;r&#x00A0;&#x003C;&#x00A0;0&#x00A0;then&#x00A0;n&#x00A0;-&#x00A0;1&#x00A0;else&#x00A0;n&#x00A0;+&#x00A0;1
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;in&#x00A0;case&#x00A0;signum&#x00A0;(abs&#x00A0;r&#x00A0;-&#x00A0;0.5)&#x00A0;of
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;-1&#x00A0;-&#x003E;&#x00A0;n
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;0&#x00A0;&#x00A0;-&#x003E;&#x00A0;if&#x00A0;even&#x00A0;n&#x00A0;then&#x00A0;n&#x00A0;else&#x00A0;m
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;1&#x00A0;&#x00A0;-&#x003E;&#x00A0;m
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;ceiling&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;if&#x00A0;r&#x00A0;&#x003E;&#x00A0;0&#x00A0;then&#x00A0;n&#x00A0;+&#x00A0;1&#x00A0;else&#x00A0;n
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;(n,r)&#x00A0;=&#x00A0;properFraction&#x00A0;x
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;floor&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;if&#x00A0;r&#x00A0;&#x003C;&#x00A0;0&#x00A0;then&#x00A0;n&#x00A0;-&#x00A0;1&#x00A0;else&#x00A0;n
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;(n,r)&#x00A0;=&#x00A0;properFraction&#x00A0;x
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-177">
class&#x00A0;&#x00A0;(RealFrac&#x00A0;a,&#x00A0;Floating&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;RealFloat&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;floatRadix&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Integer
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;floatDigits&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Int
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;floatRange&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(Int,Int)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;decodeFloat&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(Integer,Int)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;encodeFloat&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Integer&#x00A0;-&#x003E;&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;exponent&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Int
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;significand&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;scaleFloat&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;isNaN,&#x00A0;isInfinite,&#x00A0;isDenormalized,&#x00A0;isNegativeZero,&#x00A0;isIEEE
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;atan2&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;All&#x00A0;except&#x00A0;exponent,&#x00A0;significand,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;scaleFloat,&#x00A0;atan2
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;exponent&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;if&#x00A0;m&#x00A0;==&#x00A0;0&#x00A0;then&#x00A0;0&#x00A0;else&#x00A0;n&#x00A0;+&#x00A0;floatDigits&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;(m,n)&#x00A0;=&#x00A0;decodeFloat&#x00A0;x
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;significand&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;encodeFloat&#x00A0;m&#x00A0;(-&#x00A0;floatDigits&#x00A0;x)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;(m,_)&#x00A0;=&#x00A0;decodeFloat&#x00A0;x
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;scaleFloat&#x00A0;k&#x00A0;x&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;encodeFloat&#x00A0;m&#x00A0;(n+k)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;(m,n)&#x00A0;=&#x00A0;decodeFloat&#x00A0;x
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;atan2&#x00A0;y&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x&#x003E;0&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;atan&#x00A0;(y/x)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x==0&#x00A0;&amp;&amp;&#x00A0;y&#x003E;0&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;pi/2
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x&#x003C;0&#x00A0;&#x00A0;&amp;&amp;&#x00A0;y&#x003E;0&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;pi&#x00A0;+&#x00A0;atan&#x00A0;(y/x)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|(x&#x003C;=0&#x00A0;&amp;&amp;&#x00A0;y&#x003C;0)&#x00A0;&#x00A0;||
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(x&#x003C;0&#x00A0;&amp;&amp;&#x00A0;isNegativeZero&#x00A0;y)&#x00A0;||
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(isNegativeZero&#x00A0;x&#x00A0;&amp;&amp;&#x00A0;isNegativeZero&#x00A0;y)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;-atan2&#x00A0;(-y)&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;y==0&#x00A0;&amp;&amp;&#x00A0;(x&#x003C;0&#x00A0;||&#x00A0;isNegativeZero&#x00A0;x)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;pi&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;must&#x00A0;be&#x00A0;after&#x00A0;the&#x00A0;previous&#x00A0;test&#x00A0;on&#x00A0;zero&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;x==0&#x00A0;&amp;&amp;&#x00A0;y==0&#x00A0;&#x00A0;=&#x00A0;&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;must&#x00A0;be&#x00A0;after&#x00A0;the&#x00A0;other&#x00A0;double&#x00A0;zero&#x00A0;tests
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;+&#x00A0;y&#x00A0;--&#x00A0;x&#x00A0;or&#x00A0;y&#x00A0;is&#x00A0;a&#x00A0;NaN,&#x00A0;return&#x00A0;a&#x00A0;NaN&#x00A0;(via&#x00A0;+)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-178">
--&#x00A0;Numeric&#x00A0;functions
&#x00A0;<br />
&#x00A0;<br />subtract&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Num&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />subtract&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;flip&#x00A0;(-)
</div>
<p class="noindent"> <a
id="dx16-171030"></a>
<div class="verbatim" id="verbatim-179">
even,&#x00A0;odd&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Integral&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />even&#x00A0;n&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;n&#x00A0;&#8216;rem&#8216;&#x00A0;2&#x00A0;==&#x00A0;0
&#x00A0;<br />odd&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;not&#x00A0;.&#x00A0;even
</div>
<p class="noindent"> <a
id="dx16-171031"></a><a
id="dx16-171032"></a>
<div class="verbatim" id="verbatim-180">
gcd&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Integral&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />gcd&#x00A0;0&#x00A0;0&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.gcd:&#x00A0;gcd&#x00A0;0&#x00A0;0&#x00A0;is&#x00A0;undefined"
&#x00A0;<br />gcd&#x00A0;x&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;gcd'&#x00A0;(abs&#x00A0;x)&#x00A0;(abs&#x00A0;y)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;gcd'&#x00A0;x&#x00A0;0&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;gcd'&#x00A0;x&#x00A0;y&#x00A0;&#x00A0;=&#x00A0;&#x00A0;gcd'&#x00A0;y&#x00A0;(x&#x00A0;&#8216;rem&#8216;&#x00A0;y)
</div>
<p class="noindent"> <a
id="dx16-171033"></a>
<div class="verbatim" id="verbatim-181">
lcm&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Integral&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />lcm&#x00A0;_&#x00A0;0&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;0
&#x00A0;<br />lcm&#x00A0;0&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;0
&#x00A0;<br />lcm&#x00A0;x&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;abs&#x00A0;((x&#x00A0;&#8216;quot&#8216;&#x00A0;(gcd&#x00A0;x&#x00A0;y))&#x00A0;&#x22C6;&#x00A0;y)
</div>
<p class="noindent"> <a
id="dx16-171034"></a>
<div class="verbatim" id="verbatim-182">
(^)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Num&#x00A0;a,&#x00A0;Integral&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />x&#x00A0;^&#x00A0;0&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;1
&#x00A0;<br />x&#x00A0;^&#x00A0;n&#x00A0;|&#x00A0;n&#x00A0;&#x003E;&#x00A0;0&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x&#x00A0;(n-1)&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;f&#x00A0;_&#x00A0;0&#x00A0;y&#x00A0;=&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;f&#x00A0;x&#x00A0;n&#x00A0;y&#x00A0;=&#x00A0;g&#x00A0;x&#x00A0;n&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;g&#x00A0;x&#x00A0;n&#x00A0;|&#x00A0;even&#x00A0;n&#x00A0;&#x00A0;=&#x00A0;g&#x00A0;(x&#x22C6;x)&#x00A0;(n&#x00A0;&#8216;quot&#8216;&#x00A0;2)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;f&#x00A0;x&#x00A0;(n-1)&#x00A0;(x&#x22C6;y)
&#x00A0;<br />_&#x00A0;^&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;error&#x00A0;"Prelude.^:&#x00A0;negative&#x00A0;exponent"
</div>
<p class="noindent"> <a
id="dx16-171035"></a>
<div class="verbatim" id="verbatim-183">
(^^)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Fractional&#x00A0;a,&#x00A0;Integral&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />x&#x00A0;^^&#x00A0;n&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;if&#x00A0;n&#x00A0;&#x003E;=&#x00A0;0&#x00A0;then&#x00A0;x^n&#x00A0;else&#x00A0;recip&#x00A0;(x^(-n))
</div>
<p class="noindent"> <a
id="dx16-171036"></a>
<div class="verbatim" id="verbatim-184">
fromIntegral&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Integral&#x00A0;a,&#x00A0;Num&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />fromIntegral&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromInteger&#x00A0;.&#x00A0;toInteger
</div>
<p class="noindent"> <a
id="dx16-171037"></a>
<div class="verbatim" id="verbatim-185">
realToFrac&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Real&#x00A0;a,&#x00A0;Fractional&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />realToFrac&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromRational&#x00A0;.&#x00A0;toRational
</div>
<p class="noindent"> <a
id="dx16-171038"></a>
<div class="verbatim" id="verbatim-186">
--&#x00A0;Monadic&#x00A0;classes
&#x00A0;<br />
&#x00A0;<br />class&#x00A0;&#x00A0;Functor&#x00A0;f&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fmap&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;f&#x00A0;a&#x00A0;-&#x003E;&#x00A0;f&#x00A0;b
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-187">
class&#x00A0;&#x00A0;Monad&#x00A0;m&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(&#x003E;&#x003E;=)&#x00A0;&#x00A0;::&#x00A0;m&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(&#x003E;&#x003E;)&#x00A0;&#x00A0;&#x00A0;::&#x00A0;m&#x00A0;a&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;return&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;m&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fail&#x00A0;&#x00A0;&#x00A0;::&#x00A0;String&#x00A0;-&#x003E;&#x00A0;m&#x00A0;a
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(&#x003E;&#x003E;=),&#x00A0;return
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;m&#x00A0;&#x003E;&#x003E;&#x00A0;k&#x00A0;&#x00A0;=&#x00A0;&#x00A0;m&#x00A0;&#x003E;&#x003E;=&#x00A0;\_&#x00A0;-&#x003E;&#x00A0;k
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fail&#x00A0;s&#x00A0;&#x00A0;=&#x00A0;error&#x00A0;s
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-188">
sequence&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Monad&#x00A0;m&#x00A0;=&#x003E;&#x00A0;[m&#x00A0;a]&#x00A0;-&#x003E;&#x00A0;m&#x00A0;[a]
&#x00A0;<br />sequence&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldr&#x00A0;mcons&#x00A0;(return&#x00A0;[])
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;mcons&#x00A0;p&#x00A0;q&#x00A0;=&#x00A0;p&#x00A0;&#x003E;&#x003E;=&#x00A0;\x&#x00A0;-&#x003E;&#x00A0;q&#x00A0;&#x003E;&#x003E;=&#x00A0;\y&#x00A0;-&#x003E;&#x00A0;return&#x00A0;(x:y)
</div>
<p class="noindent"> <a
id="dx16-171039"></a>
<div class="verbatim" id="verbatim-189">
sequence_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Monad&#x00A0;m&#x00A0;=&#x003E;&#x00A0;[m&#x00A0;a]&#x00A0;-&#x003E;&#x00A0;m&#x00A0;()
&#x00A0;<br />sequence_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldr&#x00A0;(&#x003E;&#x003E;)&#x00A0;(return&#x00A0;())
</div>
<p class="noindent"> <a
id="dx16-171040"></a>
<div class="verbatim" id="verbatim-190">
--&#x00A0;The&#x00A0;xxxM&#x00A0;functions&#x00A0;take&#x00A0;list&#x00A0;arguments,&#x00A0;but&#x00A0;lift&#x00A0;the&#x00A0;function&#x00A0;or
&#x00A0;<br />--&#x00A0;list&#x00A0;element&#x00A0;to&#x00A0;a&#x00A0;monad&#x00A0;type
&#x00A0;<br />mapM&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Monad&#x00A0;m&#x00A0;=&#x003E;&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;m&#x00A0;[b]
&#x00A0;<br />mapM&#x00A0;f&#x00A0;as&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;sequence&#x00A0;(map&#x00A0;f&#x00A0;as)
</div>
<p class="noindent"> <a
id="dx16-171041"></a>
<div class="verbatim" id="verbatim-191">
mapM_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Monad&#x00A0;m&#x00A0;=&#x003E;&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;m&#x00A0;()
&#x00A0;<br />mapM_&#x00A0;f&#x00A0;as&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;sequence_&#x00A0;(map&#x00A0;f&#x00A0;as)
</div>
<p class="noindent"> <a
id="dx16-171042"></a>
<div class="verbatim" id="verbatim-192">
(=&#x003C;&#x003C;)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Monad&#x00A0;m&#x00A0;=&#x003E;&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;m&#x00A0;a&#x00A0;-&#x003E;&#x00A0;m&#x00A0;b
&#x00A0;<br />f&#x00A0;=&#x003C;&#x003C;&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;&#x003E;&#x003E;=&#x00A0;f
</div>
<p class="noindent"> <a
id="dx16-171043"></a>
<div class="verbatim" id="verbatim-193">
--&#x00A0;Trivial&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;()&#x00A0;&#x00A0;=&#x00A0;&#x00A0;()&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord,&#x00A0;Enum,&#x00A0;Bounded)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Not&#x00A0;legal&#x00A0;Haskell;&#x00A0;for&#x00A0;illustration&#x00A0;only
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-194">
--&#x00A0;Function&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />--&#x00A0;identity&#x00A0;function
&#x00A0;<br />id&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />id&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
</div>
<p class="noindent"> <a
id="dx16-171044"></a>
<div class="verbatim" id="verbatim-195">
--&#x00A0;constant&#x00A0;function
&#x00A0;<br />const&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />const&#x00A0;x&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
</div>
<p class="noindent"> <a
id="dx16-171045"></a>
<div class="verbatim" id="verbatim-196">
--&#x00A0;function&#x00A0;composition
&#x00A0;<br />(.)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(b&#x00A0;-&#x003E;&#x00A0;c)&#x00A0;-&#x003E;&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;c
&#x00A0;<br />f&#x00A0;.&#x00A0;g&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;\&#x00A0;x&#x00A0;-&#x003E;&#x00A0;f&#x00A0;(g&#x00A0;x)
</div>
<p class="noindent"> <a
id="dx16-171046"></a>
<div class="verbatim" id="verbatim-197">
--&#x00A0;flip&#x00A0;f&#x00A0;&#x00A0;takes&#x00A0;its&#x00A0;(first)&#x00A0;two&#x00A0;arguments&#x00A0;in&#x00A0;the&#x00A0;reverse&#x00A0;order&#x00A0;of&#x00A0;f.
&#x00A0;<br />flip&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;c)&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;c
&#x00A0;<br />flip&#x00A0;f&#x00A0;x&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;y&#x00A0;x
</div>
<p class="noindent"> <a
id="dx16-171047"></a>
<div class="verbatim" id="verbatim-198">
seq&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />seq&#x00A0;=&#x00A0;...&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Primitive
</div>
<p class="noindent"> <a
id="dx16-171048"></a>
<div class="verbatim" id="verbatim-199">
--&#x00A0;right-associating&#x00A0;infix&#x00A0;application&#x00A0;operators
&#x00A0;<br />--&#x00A0;(useful&#x00A0;in&#x00A0;continuation-passing&#x00A0;style)
&#x00A0;<br />($),&#x00A0;($!)&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />f&#x00A0;$&#x00A0;&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x
&#x00A0;<br />f&#x00A0;$!&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;&#8216;seq&#8216;&#x00A0;f&#x00A0;x
</div>
<p class="noindent"> <a
id="dx16-171049"></a><a
id="dx16-171050"></a>
<div class="verbatim" id="verbatim-200">
--&#x00A0;Boolean&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;Bool&#x00A0;&#x00A0;=&#x00A0;&#x00A0;False&#x00A0;|&#x00A0;True&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord,&#x00A0;Enum,&#x00A0;Read,&#x00A0;Show,&#x00A0;Bounded)
</div>
<p class="noindent"> <a
id="dx16-171051"></a>
<div class="verbatim" id="verbatim-201">
--&#x00A0;Boolean&#x00A0;functions
&#x00A0;<br />
&#x00A0;<br />(&amp;&amp;),&#x00A0;(||)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Bool&#x00A0;-&#x003E;&#x00A0;Bool&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />True&#x00A0;&#x00A0;&amp;&amp;&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />False&#x00A0;&amp;&amp;&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;False
&#x00A0;<br />True&#x00A0;&#x00A0;||&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;True
&#x00A0;<br />False&#x00A0;||&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
</div>
<p class="noindent"> <a
id="dx16-171052"></a><a
id="dx16-171053"></a>
<div class="verbatim" id="verbatim-202">
not&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Bool&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />not&#x00A0;True&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;False
&#x00A0;<br />not&#x00A0;False&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;True
</div>
<p class="noindent"> <a
id="dx16-171054"></a>
<div class="verbatim" id="verbatim-203">
otherwise&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Bool
&#x00A0;<br />otherwise&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;True
</div>
<p class="noindent"> <a
id="dx16-171055"></a>
<div class="verbatim" id="verbatim-204">
--&#x00A0;Character&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;Char&#x00A0;=&#x00A0;...&#x00A0;'a'&#x00A0;|&#x00A0;'b'&#x00A0;...&#x00A0;--&#x00A0;Unicode&#x00A0;values
</div>
<p class="noindent"> <a
id="dx16-171056"></a>
<div class="verbatim" id="verbatim-205">
instance&#x00A0;&#x00A0;Eq&#x00A0;Char&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;c&#x00A0;==&#x00A0;c'&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromEnum&#x00A0;c&#x00A0;==&#x00A0;fromEnum&#x00A0;c'
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-206">
instance&#x00A0;&#x00A0;Ord&#x00A0;Char&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;c&#x00A0;&#x003C;=&#x00A0;c'&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromEnum&#x00A0;c&#x00A0;&#x003C;=&#x00A0;fromEnum&#x00A0;c'
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-207">
instance&#x00A0;&#x00A0;Enum&#x00A0;Char&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;toEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;primIntToChar
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;primCharToInt
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFrom&#x00A0;c&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;map&#x00A0;toEnum&#x00A0;[fromEnum&#x00A0;c&#x00A0;..&#x00A0;fromEnum&#x00A0;(maxBound::Char)]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThen&#x00A0;c&#x00A0;c'&#x00A0;=&#x00A0;map&#x00A0;toEnum&#x00A0;[fromEnum&#x00A0;c,&#x00A0;fromEnum&#x00A0;c'&#x00A0;..&#x00A0;fromEnum&#x00A0;lastChar]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;lastChar&#x00A0;::&#x00A0;Char
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lastChar&#x00A0;|&#x00A0;c'&#x00A0;&#x003C;&#x00A0;c&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;minBound
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;maxBound
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-208">
instance&#x00A0;&#x00A0;Bounded&#x00A0;Char&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;minBound&#x00A0;&#x00A0;=&#x00A0;&#x00A0;'\0'
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;maxBound&#x00A0;&#x00A0;=&#x00A0;&#x00A0;primUnicodeMaxChar
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-209">
type&#x00A0;&#x00A0;String&#x00A0;=&#x00A0;[Char]
</div>
<p class="noindent"> <a
id="dx16-171057"></a>
<div class="verbatim" id="verbatim-210">
--&#x00A0;Maybe&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;Maybe&#x00A0;a&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Nothing&#x00A0;|&#x00A0;Just&#x00A0;a&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord,&#x00A0;Read,&#x00A0;Show)
</div>
<p class="noindent"> <a
id="dx16-171058"></a>
<div class="verbatim" id="verbatim-211">
maybe&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;b&#x00A0;-&#x003E;&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;Maybe&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />maybe&#x00A0;n&#x00A0;f&#x00A0;Nothing&#x00A0;&#x00A0;=&#x00A0;&#x00A0;n
&#x00A0;<br />maybe&#x00A0;n&#x00A0;f&#x00A0;(Just&#x00A0;x)&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x
</div>
<p class="noindent"> <a
id="dx16-171059"></a>
<div class="verbatim" id="verbatim-212">
instance&#x00A0;&#x00A0;Functor&#x00A0;Maybe&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fmap&#x00A0;f&#x00A0;Nothing&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Nothing
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fmap&#x00A0;f&#x00A0;(Just&#x00A0;x)&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Just&#x00A0;(f&#x00A0;x)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-213">
instance&#x00A0;&#x00A0;Monad&#x00A0;Maybe&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;(Just&#x00A0;x)&#x00A0;&#x003E;&#x003E;=&#x00A0;k&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;k&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Nothing&#x00A0;&#x00A0;&#x003E;&#x003E;=&#x00A0;k&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Nothing
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;return&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Just
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fail&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Nothing
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-214">
--&#x00A0;Either&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;Either&#x00A0;a&#x00A0;b&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Left&#x00A0;a&#x00A0;|&#x00A0;Right&#x00A0;b&#x00A0;&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord,&#x00A0;Read,&#x00A0;Show)
</div>
<p class="noindent"> <a
id="dx16-171060"></a>
<div class="verbatim" id="verbatim-215">
either&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;c)&#x00A0;-&#x003E;&#x00A0;(b&#x00A0;-&#x003E;&#x00A0;c)&#x00A0;-&#x003E;&#x00A0;Either&#x00A0;a&#x00A0;b&#x00A0;-&#x003E;&#x00A0;c
&#x00A0;<br />either&#x00A0;f&#x00A0;g&#x00A0;(Left&#x00A0;x)&#x00A0;&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x
&#x00A0;<br />either&#x00A0;f&#x00A0;g&#x00A0;(Right&#x00A0;y)&#x00A0;=&#x00A0;&#x00A0;g&#x00A0;y
</div>
<p class="noindent"> <a
id="dx16-171061"></a>
<div class="verbatim" id="verbatim-216">
--&#x00A0;IO&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;IO&#x00A0;a&#x00A0;=&#x00A0;...&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;abstract
</div>
<p class="noindent"> <a
id="dx16-171062"></a>
<div class="verbatim" id="verbatim-217">
instance&#x00A0;&#x00A0;Functor&#x00A0;IO&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;fmap&#x00A0;f&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;&#x003E;&#x003E;=&#x00A0;(return&#x00A0;.&#x00A0;f)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-218">
instance&#x00A0;Monad&#x00A0;IO&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;(&#x003E;&#x003E;=)&#x00A0;&#x00A0;=&#x00A0;...
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;return&#x00A0;=&#x00A0;...
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;fail&#x00A0;s&#x00A0;=&#x00A0;ioError&#x00A0;(userError&#x00A0;s)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-219">
--&#x00A0;Ordering&#x00A0;type
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;Ordering&#x00A0;&#x00A0;=&#x00A0;&#x00A0;LT&#x00A0;|&#x00A0;EQ&#x00A0;|&#x00A0;GT
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord,&#x00A0;Enum,&#x00A0;Read,&#x00A0;Show,&#x00A0;Bounded)
</div>
<p class="noindent"> <a
id="dx16-171063"></a>
<div class="verbatim" id="verbatim-220">
--&#x00A0;Standard&#x00A0;numeric&#x00A0;types.&#x00A0;&#x00A0;The&#x00A0;data&#x00A0;declarations&#x00A0;for&#x00A0;these&#x00A0;types&#x00A0;cannot
&#x00A0;<br />--&#x00A0;be&#x00A0;expressed&#x00A0;directly&#x00A0;in&#x00A0;Haskell&#x00A0;since&#x00A0;the&#x00A0;constructor&#x00A0;lists&#x00A0;would&#x00A0;be
&#x00A0;<br />--&#x00A0;far&#x00A0;too&#x00A0;large.
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;Int&#x00A0;&#x00A0;=&#x00A0;&#x00A0;minBound&#x00A0;...&#x00A0;-1&#x00A0;|&#x00A0;0&#x00A0;|&#x00A0;1&#x00A0;...&#x00A0;maxBound
&#x00A0;<br />instance&#x00A0;&#x00A0;Eq&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Int&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Ord&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Int&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Num&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Int&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Real&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Int&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Integral&#x00A0;Int&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Enum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Int&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Bounded&#x00A0;&#x00A0;Int&#x00A0;&#x00A0;where&#x00A0;...
</div>
<p class="noindent"> <a
id="dx16-171064"></a>
<div class="verbatim" id="verbatim-221">
data&#x00A0;&#x00A0;Integer&#x00A0;&#x00A0;=&#x00A0;&#x00A0;...&#x00A0;-1&#x00A0;|&#x00A0;0&#x00A0;|&#x00A0;1&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Eq&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Integer&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Ord&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Integer&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Num&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Integer&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Real&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Integer&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Integral&#x00A0;Integer&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Enum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Integer&#x00A0;&#x00A0;where&#x00A0;...
</div>
<p class="noindent"> <a
id="dx16-171065"></a>
<div class="verbatim" id="verbatim-222">
data&#x00A0;&#x00A0;Float
&#x00A0;<br />instance&#x00A0;&#x00A0;Eq&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Ord&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Num&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Real&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Fractional&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Floating&#x00A0;&#x00A0;&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;RealFrac&#x00A0;&#x00A0;&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;RealFloat&#x00A0;&#x00A0;Float&#x00A0;&#x00A0;where&#x00A0;...
</div>
<p class="noindent"> <a
id="dx16-171066"></a>
<div class="verbatim" id="verbatim-223">
data&#x00A0;&#x00A0;Double
&#x00A0;<br />instance&#x00A0;&#x00A0;Eq&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Ord&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Num&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Real&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Fractional&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Floating&#x00A0;&#x00A0;&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;RealFrac&#x00A0;&#x00A0;&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;RealFloat&#x00A0;&#x00A0;Double&#x00A0;&#x00A0;where&#x00A0;...
</div>
<p class="noindent"> <a
id="dx16-171067"></a>
<div class="verbatim" id="verbatim-224">
--&#x00A0;The&#x00A0;Enum&#x00A0;instances&#x00A0;for&#x00A0;Floats&#x00A0;and&#x00A0;Doubles&#x00A0;are&#x00A0;slightly&#x00A0;unusual.
&#x00A0;<br />--&#x00A0;The&#x00A0;&#8216;toEnum'&#x00A0;function&#x00A0;truncates&#x00A0;numbers&#x00A0;to&#x00A0;Int.&#x00A0;&#x00A0;The&#x00A0;definitions
&#x00A0;<br />--&#x00A0;of&#x00A0;enumFrom&#x00A0;and&#x00A0;enumFromThen&#x00A0;allow&#x00A0;floats&#x00A0;to&#x00A0;be&#x00A0;used&#x00A0;in&#x00A0;arithmetic
&#x00A0;<br />--&#x00A0;series:&#x00A0;[0,0.1&#x00A0;..&#x00A0;0.95].&#x00A0;&#x00A0;However,&#x00A0;roundoff&#x00A0;errors&#x00A0;make&#x00A0;these&#x00A0;somewhat
&#x00A0;<br />--&#x00A0;dubious.&#x00A0;&#x00A0;This&#x00A0;example&#x00A0;may&#x00A0;have&#x00A0;either&#x00A0;10&#x00A0;or&#x00A0;11&#x00A0;elements,&#x00A0;depending&#x00A0;on
&#x00A0;<br />--&#x00A0;how&#x00A0;0.1&#x00A0;is&#x00A0;represented.
&#x00A0;<br />
&#x00A0;<br />instance&#x00A0;&#x00A0;Enum&#x00A0;Float&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;succ&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x+1
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;pred&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x-1
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;toEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromIntegral
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromInteger&#x00A0;.&#x00A0;truncate&#x00A0;&#x00A0;&#x00A0;--&#x00A0;may&#x00A0;overflow
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFrom&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFrom
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThen&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFromThen
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromTo&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFromTo
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThenTo&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFromThenTo
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-225">
instance&#x00A0;&#x00A0;Enum&#x00A0;Double&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;succ&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x+1
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;pred&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x-1
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;toEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromIntegral
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fromEnum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;fromInteger&#x00A0;.&#x00A0;truncate&#x00A0;&#x00A0;&#x00A0;--&#x00A0;may&#x00A0;overflow
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFrom&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFrom
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThen&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFromThen
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromTo&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFromTo
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;enumFromThenTo&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;numericEnumFromThenTo
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-226">
numericEnumFrom&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Fractional&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />numericEnumFromThen&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Fractional&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />numericEnumFromTo&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Fractional&#x00A0;a,&#x00A0;Ord&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />numericEnumFromThenTo&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Fractional&#x00A0;a,&#x00A0;Ord&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />numericEnumFrom&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;iterate&#x00A0;(+1)
&#x00A0;<br />numericEnumFromThen&#x00A0;n&#x00A0;m&#x00A0;=&#x00A0;&#x00A0;iterate&#x00A0;(+(m-n))&#x00A0;n
&#x00A0;<br />numericEnumFromTo&#x00A0;n&#x00A0;m&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;takeWhile&#x00A0;(&#x003C;=&#x00A0;m+1/2)&#x00A0;(numericEnumFrom&#x00A0;n)
&#x00A0;<br />numericEnumFromThenTo&#x00A0;n&#x00A0;n'&#x00A0;m&#x00A0;=&#x00A0;takeWhile&#x00A0;p&#x00A0;(numericEnumFromThen&#x00A0;n&#x00A0;n')
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;p&#x00A0;|&#x00A0;n'&#x00A0;&#x003E;=&#x00A0;n&#x00A0;&#x00A0;&#x00A0;=&#x00A0;(&#x003C;=&#x00A0;m&#x00A0;+&#x00A0;(n'-n)/2)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;(&#x003E;=&#x00A0;m&#x00A0;+&#x00A0;(n'-n)/2)
</div>
<p class="noindent"> <a
id="dx16-171068"></a>
<div class="verbatim" id="verbatim-227">
--&#x00A0;Lists
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;[a]&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]&#x00A0;|&#x00A0;a&#x00A0;:&#x00A0;[a]&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Not&#x00A0;legal&#x00A0;Haskell;&#x00A0;for&#x00A0;illustration&#x00A0;only
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-228">
instance&#x00A0;Functor&#x00A0;[]&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fmap&#x00A0;=&#x00A0;map
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-229">
instance&#x00A0;&#x00A0;Monad&#x00A0;[]&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;m&#x00A0;&#x003E;&#x003E;=&#x00A0;k&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;concat&#x00A0;(map&#x00A0;k&#x00A0;m)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;return&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[x]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;fail&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[]
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-230">
--&#x00A0;Tuples
&#x00A0;<br />
&#x00A0;<br />data&#x00A0;&#x00A0;(a,b)&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;(a,b)&#x00A0;&#x00A0;&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord,&#x00A0;Bounded)
&#x00A0;<br />data&#x00A0;&#x00A0;(a,b,c)&#x00A0;=&#x00A0;&#x00A0;(a,b,c)&#x00A0;&#x00A0;deriving&#x00A0;(Eq,&#x00A0;Ord,&#x00A0;Bounded)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Not&#x00A0;legal&#x00A0;Haskell;&#x00A0;for&#x00A0;illustration&#x00A0;only
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-231">
--&#x00A0;component&#x00A0;projections&#x00A0;for&#x00A0;pairs:
&#x00A0;<br />--&#x00A0;(NB:&#x00A0;not&#x00A0;provided&#x00A0;for&#x00A0;triples,&#x00A0;quadruples,&#x00A0;etc.)
&#x00A0;<br />fst&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a,b)&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />fst&#x00A0;(x,y)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
</div>
<p class="noindent"> <a
id="dx16-171069"></a>
<div class="verbatim" id="verbatim-232">
snd&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a,b)&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />snd&#x00A0;(x,y)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;y
</div>
<p class="noindent"> <a
id="dx16-171070"></a>
<div class="verbatim" id="verbatim-233">
--&#x00A0;curry&#x00A0;converts&#x00A0;an&#x00A0;uncurried&#x00A0;function&#x00A0;to&#x00A0;a&#x00A0;curried&#x00A0;function;
&#x00A0;<br />--&#x00A0;uncurry&#x00A0;converts&#x00A0;a&#x00A0;curried&#x00A0;function&#x00A0;to&#x00A0;a&#x00A0;function&#x00A0;on&#x00A0;pairs.
&#x00A0;<br />curry&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;((a,&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;c)&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;c
&#x00A0;<br />curry&#x00A0;f&#x00A0;x&#x00A0;y&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;(x,&#x00A0;y)
</div>
<p class="noindent"> <a
id="dx16-171071"></a>
<div class="verbatim" id="verbatim-234">
uncurry&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;c)&#x00A0;-&#x003E;&#x00A0;((a,&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;c)
&#x00A0;<br />uncurry&#x00A0;f&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;(fst&#x00A0;p)&#x00A0;(snd&#x00A0;p)
</div>
<p class="noindent"> <a
id="dx16-171072"></a>
<div class="verbatim" id="verbatim-235">
--&#x00A0;Misc&#x00A0;functions
&#x00A0;<br />
&#x00A0;<br />--&#x00A0;until&#x00A0;p&#x00A0;f&#x00A0;&#x00A0;yields&#x00A0;the&#x00A0;result&#x00A0;of&#x00A0;applying&#x00A0;f&#x00A0;until&#x00A0;p&#x00A0;holds.
&#x00A0;<br />until&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;Bool)&#x00A0;-&#x003E;&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />until&#x00A0;p&#x00A0;f&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;p&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;&#x00A0;until&#x00A0;p&#x00A0;f&#x00A0;(f&#x00A0;x)
</div>
<p class="noindent"> <a
id="dx16-171073"></a>
<div class="verbatim" id="verbatim-236">
--&#x00A0;asTypeOf&#x00A0;is&#x00A0;a&#x00A0;type-restricted&#x00A0;version&#x00A0;of&#x00A0;const.&#x00A0;&#x00A0;It&#x00A0;is&#x00A0;usually&#x00A0;used
&#x00A0;<br />--&#x00A0;as&#x00A0;an&#x00A0;infix&#x00A0;operator,&#x00A0;and&#x00A0;its&#x00A0;typing&#x00A0;forces&#x00A0;its&#x00A0;first&#x00A0;argument
&#x00A0;<br />--&#x00A0;(which&#x00A0;is&#x00A0;usually&#x00A0;overloaded)&#x00A0;to&#x00A0;have&#x00A0;the&#x00A0;same&#x00A0;type&#x00A0;as&#x00A0;the&#x00A0;second.
&#x00A0;<br />asTypeOf&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />asTypeOf&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;const
</div>
<p class="noindent"> <a
id="dx16-171074"></a>
<div class="verbatim" id="verbatim-237">
--&#x00A0;error&#x00A0;stops&#x00A0;execution&#x00A0;and&#x00A0;displays&#x00A0;an&#x00A0;error&#x00A0;message
&#x00A0;<br />
&#x00A0;<br />error&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;String&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />error&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;primError
</div>
<p class="noindent"> <a
id="dx16-171075"></a>
<div class="verbatim" id="verbatim-238">
--&#x00A0;It&#x00A0;is&#x00A0;expected&#x00A0;that&#x00A0;compilers&#x00A0;will&#x00A0;recognize&#x00A0;this&#x00A0;and&#x00A0;insert&#x00A0;error
&#x00A0;<br />--&#x00A0;messages&#x00A0;that&#x00A0;are&#x00A0;more&#x00A0;appropriate&#x00A0;to&#x00A0;the&#x00A0;context&#x00A0;in&#x00A0;which&#x00A0;undefined
&#x00A0;<br />--&#x00A0;appears.
&#x00A0;<br />
&#x00A0;<br />undefined&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a
&#x00A0;<br />undefined&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.undefined"
</div>
<p class="noindent"> <a
id="dx16-171076"></a>
<h3 class="sectionHead"><span class="titlemark">9.1 </span> <a
id="x16-1720009.1"></a>Prelude <span
class="pcrr7t-">PreludeList</span></h3>
<p class="noindent">
<div class="verbatim" id="verbatim-239">
--&#x00A0;Standard&#x00A0;list&#x00A0;functions
&#x00A0;<br />
&#x00A0;<br />module&#x00A0;PreludeList&#x00A0;(
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;map,&#x00A0;(++),&#x00A0;filter,&#x00A0;concat,&#x00A0;concatMap,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;head,&#x00A0;last,&#x00A0;tail,&#x00A0;init,&#x00A0;null,&#x00A0;length,&#x00A0;(!!),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;foldl,&#x00A0;foldl1,&#x00A0;scanl,&#x00A0;scanl1,&#x00A0;foldr,&#x00A0;foldr1,&#x00A0;scanr,&#x00A0;scanr1,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;iterate,&#x00A0;repeat,&#x00A0;replicate,&#x00A0;cycle,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;take,&#x00A0;drop,&#x00A0;splitAt,&#x00A0;takeWhile,&#x00A0;dropWhile,&#x00A0;span,&#x00A0;break,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;lines,&#x00A0;words,&#x00A0;unlines,&#x00A0;unwords,&#x00A0;reverse,&#x00A0;and,&#x00A0;or,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;any,&#x00A0;all,&#x00A0;elem,&#x00A0;notElem,&#x00A0;lookup,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;sum,&#x00A0;product,&#x00A0;maximum,&#x00A0;minimum,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;zip,&#x00A0;zip3,&#x00A0;zipWith,&#x00A0;zipWith3,&#x00A0;unzip,&#x00A0;unzip3)
&#x00A0;<br />&#x00A0;&#x00A0;where
</div>
<p class="noindent"> <a
id="dx16-172001"></a>
<div class="verbatim" id="verbatim-240">
import&#x00A0;qualified&#x00A0;Data.Char(isSpace)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-241">
infixl&#x00A0;9&#x00A0;&#x00A0;!!
&#x00A0;<br />infixr&#x00A0;5&#x00A0;&#x00A0;++
&#x00A0;<br />infix&#x00A0;&#x00A0;4&#x00A0;&#x00A0;&#8216;elem&#8216;,&#x00A0;&#8216;notElem&#8216;
</div>
<p class="noindent"> <a
id="dx16-172002"></a><a
id="dx16-172003"></a><a
id="dx16-172004"></a><a
id="dx16-172005"></a>
<div class="verbatim" id="verbatim-242">
--&#x00A0;Map&#x00A0;and&#x00A0;append
&#x00A0;<br />map&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[b]
&#x00A0;<br />map&#x00A0;f&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[]
&#x00A0;<br />map&#x00A0;f&#x00A0;(x:xs)&#x00A0;=&#x00A0;f&#x00A0;x&#x00A0;:&#x00A0;map&#x00A0;f&#x00A0;xs
</div>
<p class="noindent"> <a
id="dx16-172006"></a>
<div class="verbatim" id="verbatim-243">
(++)&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;++&#x00A0;ys&#x00A0;=&#x00A0;ys
&#x00A0;<br />(x:xs)&#x00A0;++&#x00A0;ys&#x00A0;=&#x00A0;x&#x00A0;:&#x00A0;(xs&#x00A0;++&#x00A0;ys)
</div>
<p class="noindent"> <a
id="dx16-172007"></a>
<div class="verbatim" id="verbatim-244">
filter&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;Bool)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />filter&#x00A0;p&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[]
&#x00A0;<br />filter&#x00A0;p&#x00A0;(x:xs)&#x00A0;|&#x00A0;p&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;x&#x00A0;:&#x00A0;filter&#x00A0;p&#x00A0;xs
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;filter&#x00A0;p&#x00A0;xs
</div>
<p class="noindent"> <a
id="dx16-172008"></a>
<div class="verbatim" id="verbatim-245">
concat&#x00A0;::&#x00A0;[[a]]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />concat&#x00A0;xss&#x00A0;=&#x00A0;foldr&#x00A0;(++)&#x00A0;[]&#x00A0;xss
</div>
<p class="noindent"> <a
id="dx16-172009"></a>
<div class="verbatim" id="verbatim-246">
concatMap&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;[b])&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[b]
&#x00A0;<br />concatMap&#x00A0;f&#x00A0;=&#x00A0;concat&#x00A0;.&#x00A0;map&#x00A0;f
</div>
<p class="noindent"> <a
id="dx16-172010"></a>
<div class="verbatim" id="verbatim-247">
--&#x00A0;head&#x00A0;and&#x00A0;tail&#x00A0;extract&#x00A0;the&#x00A0;first&#x00A0;element&#x00A0;and&#x00A0;remaining&#x00A0;elements,
&#x00A0;<br />--&#x00A0;respectively,&#x00A0;of&#x00A0;a&#x00A0;list,&#x00A0;which&#x00A0;must&#x00A0;be&#x00A0;non-empty.&#x00A0;&#x00A0;last&#x00A0;and&#x00A0;init
&#x00A0;<br />--&#x00A0;are&#x00A0;the&#x00A0;dual&#x00A0;functions&#x00A0;working&#x00A0;from&#x00A0;the&#x00A0;end&#x00A0;of&#x00A0;a&#x00A0;finite&#x00A0;list,
&#x00A0;<br />--&#x00A0;rather&#x00A0;than&#x00A0;the&#x00A0;beginning.
&#x00A0;<br />
&#x00A0;<br />head&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />head&#x00A0;(x:_)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />head&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.head:&#x00A0;empty&#x00A0;list"
</div>
<p class="noindent"> <a
id="dx16-172011"></a>
<div class="verbatim" id="verbatim-248">
tail&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />tail&#x00A0;(_:xs)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;xs
&#x00A0;<br />tail&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.tail:&#x00A0;empty&#x00A0;list"
</div>
<p class="noindent"> <a
id="dx16-172012"></a>
<div class="verbatim" id="verbatim-249">
last&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />last&#x00A0;[x]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />last&#x00A0;(_:xs)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;last&#x00A0;xs
&#x00A0;<br />last&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.last:&#x00A0;empty&#x00A0;list"
</div>
<p class="noindent"> <a
id="dx16-172013"></a>
<div class="verbatim" id="verbatim-250">
init&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />init&#x00A0;[x]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />init&#x00A0;(x:xs)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;:&#x00A0;init&#x00A0;xs
&#x00A0;<br />init&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.init:&#x00A0;empty&#x00A0;list"
</div>
<p class="noindent"> <a
id="dx16-172014"></a>
<div class="verbatim" id="verbatim-251">
null&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />null&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;True
&#x00A0;<br />null&#x00A0;(_:_)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;False
</div>
<p class="noindent"> <a
id="dx16-172015"></a>
<div class="verbatim" id="verbatim-252">
--&#x00A0;length&#x00A0;returns&#x00A0;the&#x00A0;length&#x00A0;of&#x00A0;a&#x00A0;finite&#x00A0;list&#x00A0;as&#x00A0;an&#x00A0;Int.
&#x00A0;<br />length&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;Int
&#x00A0;<br />length&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;0
&#x00A0;<br />length&#x00A0;(_:l)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;1&#x00A0;+&#x00A0;length&#x00A0;l
</div>
<p class="noindent"> <a
id="dx16-172016"></a>
<div class="verbatim" id="verbatim-253">
--&#x00A0;List&#x00A0;index&#x00A0;(subscript)&#x00A0;operator,&#x00A0;0-origin
&#x00A0;<br />(!!)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />xs&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;!!&#x00A0;n&#x00A0;|&#x00A0;n&#x00A0;&#x003C;&#x00A0;0&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.!!:&#x00A0;negative&#x00A0;index"
&#x00A0;<br />[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;!!&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.!!:&#x00A0;index&#x00A0;too&#x00A0;large"
&#x00A0;<br />(x:_)&#x00A0;&#x00A0;!!&#x00A0;0&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />(_:xs)&#x00A0;!!&#x00A0;n&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;xs&#x00A0;!!&#x00A0;(n-1)
</div>
<p class="noindent"> <a
id="dx16-172017"></a>
<div class="verbatim" id="verbatim-254">
--&#x00A0;foldl,&#x00A0;applied&#x00A0;to&#x00A0;a&#x00A0;binary&#x00A0;operator,&#x00A0;a&#x00A0;starting&#x00A0;value&#x00A0;(typically&#x00A0;the
&#x00A0;<br />--&#x00A0;left-identity&#x00A0;of&#x00A0;the&#x00A0;operator),&#x00A0;and&#x00A0;a&#x00A0;list,&#x00A0;reduces&#x00A0;the&#x00A0;list&#x00A0;using
&#x00A0;<br />--&#x00A0;the&#x00A0;binary&#x00A0;operator,&#x00A0;from&#x00A0;left&#x00A0;to&#x00A0;right:
&#x00A0;<br />--&#x00A0;&#x00A0;foldl&#x00A0;f&#x00A0;z&#x00A0;[x1,&#x00A0;x2,&#x00A0;...,&#x00A0;xn]&#x00A0;==&#x00A0;(...((z&#x00A0;&#8216;f&#8216;&#x00A0;x1)&#x00A0;&#8216;f&#8216;&#x00A0;x2)&#x00A0;&#8216;f&#8216;...)&#x00A0;&#8216;f&#8216;&#x00A0;xn
&#x00A0;<br />--&#x00A0;foldl1&#x00A0;is&#x00A0;a&#x00A0;variant&#x00A0;that&#x00A0;has&#x00A0;no&#x00A0;starting&#x00A0;value&#x00A0;argument,&#x00A0;and&#x00A0;&#x00A0;thus&#x00A0;must
&#x00A0;<br />--&#x00A0;be&#x00A0;applied&#x00A0;to&#x00A0;non-empty&#x00A0;lists.&#x00A0;&#x00A0;scanl&#x00A0;is&#x00A0;similar&#x00A0;to&#x00A0;foldl,&#x00A0;but&#x00A0;returns
&#x00A0;<br />--&#x00A0;a&#x00A0;list&#x00A0;of&#x00A0;successive&#x00A0;reduced&#x00A0;values&#x00A0;from&#x00A0;the&#x00A0;left:
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;scanl&#x00A0;f&#x00A0;z&#x00A0;[x1,&#x00A0;x2,&#x00A0;...]&#x00A0;==&#x00A0;[z,&#x00A0;z&#x00A0;&#8216;f&#8216;&#x00A0;x1,&#x00A0;(z&#x00A0;&#8216;f&#8216;&#x00A0;x1)&#x00A0;&#8216;f&#8216;&#x00A0;x2,&#x00A0;...]
&#x00A0;<br />--&#x00A0;Note&#x00A0;that&#x00A0;&#x00A0;last&#x00A0;(scanl&#x00A0;f&#x00A0;z&#x00A0;xs)&#x00A0;==&#x00A0;foldl&#x00A0;f&#x00A0;z&#x00A0;xs.
&#x00A0;<br />--&#x00A0;scanl1&#x00A0;is&#x00A0;similar,&#x00A0;again&#x00A0;without&#x00A0;the&#x00A0;starting&#x00A0;element:
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;scanl1&#x00A0;f&#x00A0;[x1,&#x00A0;x2,&#x00A0;...]&#x00A0;==&#x00A0;[x1,&#x00A0;x1&#x00A0;&#8216;f&#8216;&#x00A0;x2,&#x00A0;...]
&#x00A0;<br />
&#x00A0;<br />foldl&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[b]&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />foldl&#x00A0;f&#x00A0;z&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;z
&#x00A0;<br />foldl&#x00A0;f&#x00A0;z&#x00A0;(x:xs)&#x00A0;=&#x00A0;&#x00A0;foldl&#x00A0;f&#x00A0;(f&#x00A0;z&#x00A0;x)&#x00A0;xs
</div>
<p class="noindent"> <a
id="dx16-172018"></a>
<div class="verbatim" id="verbatim-255">
foldl1&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />foldl1&#x00A0;f&#x00A0;(x:xs)&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldl&#x00A0;f&#x00A0;x&#x00A0;xs
&#x00A0;<br />foldl1&#x00A0;_&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.foldl1:&#x00A0;empty&#x00A0;list"
</div>
<p class="noindent"> <a
id="dx16-172019"></a>
<div class="verbatim" id="verbatim-256">
scanl&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[b]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />scanl&#x00A0;f&#x00A0;q&#x00A0;xs&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;q&#x00A0;:&#x00A0;(case&#x00A0;xs&#x00A0;of
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;-&#x003E;&#x00A0;[]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;x:xs&#x00A0;-&#x003E;&#x00A0;scanl&#x00A0;f&#x00A0;(f&#x00A0;q&#x00A0;x)&#x00A0;xs)
</div>
<p class="noindent"> <a
id="dx16-172020"></a>
<div class="verbatim" id="verbatim-257">
scanl1&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />scanl1&#x00A0;f&#x00A0;(x:xs)&#x00A0;&#x00A0;=&#x00A0;&#x00A0;scanl&#x00A0;f&#x00A0;x&#x00A0;xs
&#x00A0;<br />scanl1&#x00A0;_&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
</div>
<p class="noindent"> <a
id="dx16-172021"></a>
<div class="verbatim" id="verbatim-258">
--&#x00A0;foldr,&#x00A0;foldr1,&#x00A0;scanr,&#x00A0;and&#x00A0;scanr1&#x00A0;are&#x00A0;the&#x00A0;right-to-left&#x00A0;duals&#x00A0;of&#x00A0;the
&#x00A0;<br />--&#x00A0;above&#x00A0;functions.
&#x00A0;<br />
&#x00A0;<br />foldr&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;b
&#x00A0;<br />foldr&#x00A0;f&#x00A0;z&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;z
&#x00A0;<br />foldr&#x00A0;f&#x00A0;z&#x00A0;(x:xs)&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x&#x00A0;(foldr&#x00A0;f&#x00A0;z&#x00A0;xs)
</div>
<p class="noindent"> <a
id="dx16-172022"></a>
<div class="verbatim" id="verbatim-259">
foldr1&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />foldr1&#x00A0;f&#x00A0;[x]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x
&#x00A0;<br />foldr1&#x00A0;f&#x00A0;(x:xs)&#x00A0;&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x&#x00A0;(foldr1&#x00A0;f&#x00A0;xs)
&#x00A0;<br />foldr1&#x00A0;_&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.foldr1:&#x00A0;empty&#x00A0;list"
</div>
<p class="noindent"> <a
id="dx16-172023"></a>
<div class="verbatim" id="verbatim-260">
scanr&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;b)&#x00A0;-&#x003E;&#x00A0;b&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[b]
&#x00A0;<br />scanr&#x00A0;f&#x00A0;q0&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[q0]
&#x00A0;<br />scanr&#x00A0;f&#x00A0;q0&#x00A0;(x:xs)&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x&#x00A0;q&#x00A0;:&#x00A0;qs
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;qs@(q:_)&#x00A0;=&#x00A0;scanr&#x00A0;f&#x00A0;q0&#x00A0;xs&#x00A0;
</div>
<p class="noindent"> <a
id="dx16-172024"></a>
<div class="verbatim" id="verbatim-261">
scanr1&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />scanr1&#x00A0;f&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />scanr1&#x00A0;f&#x00A0;[x]&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[x]
&#x00A0;<br />scanr1&#x00A0;f&#x00A0;(x:xs)&#x00A0;=&#x00A0;&#x00A0;f&#x00A0;x&#x00A0;q&#x00A0;:&#x00A0;qs
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;qs@(q:_)&#x00A0;=&#x00A0;scanr1&#x00A0;f&#x00A0;xs&#x00A0;
</div>
<p class="noindent"> <a
id="dx16-172025"></a>
<div class="verbatim" id="verbatim-262">
--&#x00A0;iterate&#x00A0;f&#x00A0;x&#x00A0;returns&#x00A0;an&#x00A0;infinite&#x00A0;list&#x00A0;of&#x00A0;repeated&#x00A0;applications&#x00A0;of&#x00A0;f&#x00A0;to&#x00A0;x:
&#x00A0;<br />--&#x00A0;iterate&#x00A0;f&#x00A0;x&#x00A0;==&#x00A0;[x,&#x00A0;f&#x00A0;x,&#x00A0;f&#x00A0;(f&#x00A0;x),&#x00A0;...]
&#x00A0;<br />iterate&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />iterate&#x00A0;f&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;:&#x00A0;iterate&#x00A0;f&#x00A0;(f&#x00A0;x)
</div>
<p class="noindent"> <a
id="dx16-172026"></a>
<div class="verbatim" id="verbatim-263">
--&#x00A0;repeat&#x00A0;x&#x00A0;is&#x00A0;an&#x00A0;infinite&#x00A0;list,&#x00A0;with&#x00A0;x&#x00A0;the&#x00A0;value&#x00A0;of&#x00A0;every&#x00A0;element.
&#x00A0;<br />repeat&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />repeat&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;xs&#x00A0;where&#x00A0;xs&#x00A0;=&#x00A0;x:xs
</div>
<p class="noindent"> <a
id="dx16-172027"></a>
<div class="verbatim" id="verbatim-264">
--&#x00A0;replicate&#x00A0;n&#x00A0;x&#x00A0;is&#x00A0;a&#x00A0;list&#x00A0;of&#x00A0;length&#x00A0;n&#x00A0;with&#x00A0;x&#x00A0;the&#x00A0;value&#x00A0;of&#x00A0;every&#x00A0;element
&#x00A0;<br />replicate&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />replicate&#x00A0;n&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;take&#x00A0;n&#x00A0;(repeat&#x00A0;x)
</div>
<p class="noindent"> <a
id="dx16-172028"></a>
<div class="verbatim" id="verbatim-265">
--&#x00A0;cycle&#x00A0;ties&#x00A0;a&#x00A0;finite&#x00A0;list&#x00A0;into&#x00A0;a&#x00A0;circular&#x00A0;one,&#x00A0;or&#x00A0;equivalently,
&#x00A0;<br />--&#x00A0;the&#x00A0;infinite&#x00A0;repetition&#x00A0;of&#x00A0;the&#x00A0;original&#x00A0;list.&#x00A0;&#x00A0;It&#x00A0;is&#x00A0;the&#x00A0;identity
&#x00A0;<br />--&#x00A0;on&#x00A0;infinite&#x00A0;lists.
&#x00A0;<br />
&#x00A0;<br />cycle&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />cycle&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.cycle:&#x00A0;empty&#x00A0;list"
&#x00A0;<br />cycle&#x00A0;xs&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;xs'&#x00A0;where&#x00A0;xs'&#x00A0;=&#x00A0;xs&#x00A0;++&#x00A0;xs'
</div>
<p class="noindent"> <a
id="dx16-172029"></a>
<div class="verbatim" id="verbatim-266">
--&#x00A0;take&#x00A0;n,&#x00A0;applied&#x00A0;to&#x00A0;a&#x00A0;list&#x00A0;xs,&#x00A0;returns&#x00A0;the&#x00A0;prefix&#x00A0;of&#x00A0;xs&#x00A0;of&#x00A0;length&#x00A0;n,
&#x00A0;<br />--&#x00A0;or&#x00A0;xs&#x00A0;itself&#x00A0;if&#x00A0;n&#x00A0;&#x003E;&#x00A0;length&#x00A0;xs.&#x00A0;&#x00A0;drop&#x00A0;n&#x00A0;xs&#x00A0;returns&#x00A0;the&#x00A0;suffix&#x00A0;of&#x00A0;xs
&#x00A0;<br />--&#x00A0;after&#x00A0;the&#x00A0;first&#x00A0;n&#x00A0;elements,&#x00A0;or&#x00A0;[]&#x00A0;if&#x00A0;n&#x00A0;&#x003E;&#x00A0;length&#x00A0;xs.&#x00A0;&#x00A0;splitAt&#x00A0;n&#x00A0;xs
&#x00A0;<br />--&#x00A0;is&#x00A0;equivalent&#x00A0;to&#x00A0;(take&#x00A0;n&#x00A0;xs,&#x00A0;drop&#x00A0;n&#x00A0;xs).
&#x00A0;<br />
&#x00A0;<br />take&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />take&#x00A0;n&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;n&#x00A0;&#x003C;=&#x00A0;0&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />take&#x00A0;_&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />take&#x00A0;n&#x00A0;(x:xs)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;:&#x00A0;take&#x00A0;(n-1)&#x00A0;xs
</div>
<p class="noindent"> <a
id="dx16-172030"></a>
<div class="verbatim" id="verbatim-267">
drop&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />drop&#x00A0;n&#x00A0;xs&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;n&#x00A0;&#x003C;=&#x00A0;0&#x00A0;=&#x00A0;&#x00A0;xs
&#x00A0;<br />drop&#x00A0;_&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />drop&#x00A0;n&#x00A0;(_:xs)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;drop&#x00A0;(n-1)&#x00A0;xs
</div>
<p class="noindent"> <a
id="dx16-172031"></a>
<div class="verbatim" id="verbatim-268">
splitAt&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;([a],[a])
&#x00A0;<br />splitAt&#x00A0;n&#x00A0;xs&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;(take&#x00A0;n&#x00A0;xs,&#x00A0;drop&#x00A0;n&#x00A0;xs)
</div>
<p class="noindent"> <a
id="dx16-172032"></a>
<div class="verbatim" id="verbatim-269">
--&#x00A0;takeWhile,&#x00A0;applied&#x00A0;to&#x00A0;a&#x00A0;predicate&#x00A0;p&#x00A0;and&#x00A0;a&#x00A0;list&#x00A0;xs,&#x00A0;returns&#x00A0;the&#x00A0;longest
&#x00A0;<br />--&#x00A0;prefix&#x00A0;(possibly&#x00A0;empty)&#x00A0;of&#x00A0;xs&#x00A0;of&#x00A0;elements&#x00A0;that&#x00A0;satisfy&#x00A0;p.&#x00A0;&#x00A0;dropWhile&#x00A0;p&#x00A0;xs
&#x00A0;<br />--&#x00A0;returns&#x00A0;the&#x00A0;remaining&#x00A0;suffix.&#x00A0;&#x00A0;span&#x00A0;p&#x00A0;xs&#x00A0;is&#x00A0;equivalent&#x00A0;to
&#x00A0;<br />--&#x00A0;(takeWhile&#x00A0;p&#x00A0;xs,&#x00A0;dropWhile&#x00A0;p&#x00A0;xs),&#x00A0;while&#x00A0;break&#x00A0;p&#x00A0;uses&#x00A0;the&#x00A0;negation&#x00A0;of&#x00A0;p.
&#x00A0;<br />
&#x00A0;<br />takeWhile&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;Bool)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />takeWhile&#x00A0;p&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />takeWhile&#x00A0;p&#x00A0;(x:xs)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;p&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;x&#x00A0;:&#x00A0;takeWhile&#x00A0;p&#x00A0;xs
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;&#x00A0;[]
</div>
<p class="noindent"> <a
id="dx16-172033"></a>
<div class="verbatim" id="verbatim-270">
dropWhile&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;Bool)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />dropWhile&#x00A0;p&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />dropWhile&#x00A0;p&#x00A0;xs@(x:xs')
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;p&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;dropWhile&#x00A0;p&#x00A0;xs'
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;&#x00A0;xs
</div>
<p class="noindent"> <a
id="dx16-172034"></a>
<div class="verbatim" id="verbatim-271">
span,&#x00A0;break&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;Bool)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;([a],[a])
&#x00A0;<br />span&#x00A0;p&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;([],[])
&#x00A0;<br />span&#x00A0;p&#x00A0;xs@(x:xs')
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;p&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;(x:ys,zs)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;=&#x00A0;&#x00A0;([],xs)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;(ys,zs)&#x00A0;=&#x00A0;span&#x00A0;p&#x00A0;xs'
</div>
<p class="noindent"> <a
id="dx16-172035"></a><a
id="dx16-172036"></a>
<div class="verbatim" id="verbatim-272">
break&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;span&#x00A0;(not&#x00A0;.&#x00A0;p)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-273">
--&#x00A0;lines&#x00A0;breaks&#x00A0;a&#x00A0;string&#x00A0;up&#x00A0;into&#x00A0;a&#x00A0;list&#x00A0;of&#x00A0;strings&#x00A0;at&#x00A0;newline&#x00A0;characters.
&#x00A0;<br />--&#x00A0;The&#x00A0;resulting&#x00A0;strings&#x00A0;do&#x00A0;not&#x00A0;contain&#x00A0;newlines.&#x00A0;&#x00A0;Similary,&#x00A0;words
&#x00A0;<br />--&#x00A0;breaks&#x00A0;a&#x00A0;string&#x00A0;up&#x00A0;into&#x00A0;a&#x00A0;list&#x00A0;of&#x00A0;words,&#x00A0;which&#x00A0;were&#x00A0;delimited&#x00A0;by
&#x00A0;<br />--&#x00A0;white&#x00A0;space.&#x00A0;&#x00A0;unlines&#x00A0;and&#x00A0;unwords&#x00A0;are&#x00A0;the&#x00A0;inverse&#x00A0;operations.
&#x00A0;<br />--&#x00A0;unlines&#x00A0;joins&#x00A0;lines&#x00A0;with&#x00A0;terminating&#x00A0;newlines,&#x00A0;and&#x00A0;unwords&#x00A0;joins
&#x00A0;<br />--&#x00A0;words&#x00A0;with&#x00A0;separating&#x00A0;spaces.
&#x00A0;<br />
&#x00A0;<br />lines&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;String&#x00A0;-&#x003E;&#x00A0;[String]
&#x00A0;<br />lines&#x00A0;""&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
&#x00A0;<br />lines&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;let&#x00A0;(l,&#x00A0;s')&#x00A0;=&#x00A0;break&#x00A0;(==&#x00A0;'\n')&#x00A0;s
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;in&#x00A0;&#x00A0;l&#x00A0;:&#x00A0;case&#x00A0;s'&#x00A0;of
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;-&#x003E;&#x00A0;[]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(_:s'')&#x00A0;-&#x003E;&#x00A0;lines&#x00A0;s''
</div>
<p class="noindent"> <a
id="dx16-172037"></a>
<div class="verbatim" id="verbatim-274">
words&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;String&#x00A0;-&#x003E;&#x00A0;[String]
&#x00A0;<br />words&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;case&#x00A0;dropWhile&#x00A0;Char.isSpace&#x00A0;s&#x00A0;of
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;""&#x00A0;-&#x003E;&#x00A0;[]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;s'&#x00A0;-&#x003E;&#x00A0;w&#x00A0;:&#x00A0;words&#x00A0;s''
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;(w,&#x00A0;s'')&#x00A0;=&#x00A0;break&#x00A0;Char.isSpace&#x00A0;s'
</div>
<p class="noindent"> <a
id="dx16-172038"></a>
<div class="verbatim" id="verbatim-275">
unlines&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[String]&#x00A0;-&#x003E;&#x00A0;String
&#x00A0;<br />unlines&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;concatMap&#x00A0;(++&#x00A0;"\n")
</div>
<p class="noindent"> <a
id="dx16-172039"></a>
<div class="verbatim" id="verbatim-276">
unwords&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[String]&#x00A0;-&#x003E;&#x00A0;String
&#x00A0;<br />unwords&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;""
&#x00A0;<br />unwords&#x00A0;ws&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldr1&#x00A0;(\w&#x00A0;s&#x00A0;-&#x003E;&#x00A0;w&#x00A0;++&#x00A0;'&#x00A0;':s)&#x00A0;ws
</div>
<p class="noindent"> <a
id="dx16-172040"></a>
<div class="verbatim" id="verbatim-277">
--&#x00A0;reverse&#x00A0;xs&#x00A0;returns&#x00A0;the&#x00A0;elements&#x00A0;of&#x00A0;xs&#x00A0;in&#x00A0;reverse&#x00A0;order.&#x00A0;&#x00A0;xs&#x00A0;must&#x00A0;be&#x00A0;finite.
&#x00A0;<br />reverse&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[a]
&#x00A0;<br />reverse&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldl&#x00A0;(flip&#x00A0;(:))&#x00A0;[]
</div>
<p class="noindent"> <a
id="dx16-172041"></a>
<div class="verbatim" id="verbatim-278">
--&#x00A0;and&#x00A0;returns&#x00A0;the&#x00A0;conjunction&#x00A0;of&#x00A0;a&#x00A0;Boolean&#x00A0;list.&#x00A0;&#x00A0;For&#x00A0;the&#x00A0;result&#x00A0;to&#x00A0;be
&#x00A0;<br />--&#x00A0;True,&#x00A0;the&#x00A0;list&#x00A0;must&#x00A0;be&#x00A0;finite;&#x00A0;False,&#x00A0;however,&#x00A0;results&#x00A0;from&#x00A0;a&#x00A0;False
&#x00A0;<br />--&#x00A0;value&#x00A0;at&#x00A0;a&#x00A0;finite&#x00A0;index&#x00A0;of&#x00A0;a&#x00A0;finite&#x00A0;or&#x00A0;infinite&#x00A0;list.&#x00A0;&#x00A0;or&#x00A0;is&#x00A0;the
&#x00A0;<br />--&#x00A0;disjunctive&#x00A0;dual&#x00A0;of&#x00A0;and.
&#x00A0;<br />and,&#x00A0;or&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[Bool]&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />and&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldr&#x00A0;(&amp;&amp;)&#x00A0;True
&#x00A0;<br />or&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldr&#x00A0;(||)&#x00A0;False
</div>
<p class="noindent"> <a
id="dx16-172042"></a><a
id="dx16-172043"></a>
<div class="verbatim" id="verbatim-279">
--&#x00A0;Applied&#x00A0;to&#x00A0;a&#x00A0;predicate&#x00A0;and&#x00A0;a&#x00A0;list,&#x00A0;any&#x00A0;determines&#x00A0;if&#x00A0;any&#x00A0;element
&#x00A0;<br />--&#x00A0;of&#x00A0;the&#x00A0;list&#x00A0;satisfies&#x00A0;the&#x00A0;predicate.&#x00A0;&#x00A0;Similarly,&#x00A0;for&#x00A0;all.
&#x00A0;<br />any,&#x00A0;all&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a&#x00A0;-&#x003E;&#x00A0;Bool)&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />any&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;or&#x00A0;.&#x00A0;map&#x00A0;p
&#x00A0;<br />all&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;and&#x00A0;.&#x00A0;map&#x00A0;p
</div>
<p class="noindent"> <a
id="dx16-172044"></a><a
id="dx16-172045"></a>
<div class="verbatim" id="verbatim-280">
--&#x00A0;elem&#x00A0;is&#x00A0;the&#x00A0;list&#x00A0;membership&#x00A0;predicate,&#x00A0;usually&#x00A0;written&#x00A0;in&#x00A0;infix&#x00A0;form,
&#x00A0;<br />--&#x00A0;e.g.,&#x00A0;x&#x00A0;&#8216;elem&#8216;&#x00A0;xs.&#x00A0;&#x00A0;notElem&#x00A0;is&#x00A0;the&#x00A0;negation.
&#x00A0;<br />elem,&#x00A0;notElem&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Eq&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;Bool
&#x00A0;<br />elem&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;any&#x00A0;(==&#x00A0;x)
&#x00A0;<br />notElem&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;all&#x00A0;(/=&#x00A0;x)
</div>
<p class="noindent"> <a
id="dx16-172046"></a><a
id="dx16-172047"></a>
<div class="verbatim" id="verbatim-281">
--&#x00A0;lookup&#x00A0;key&#x00A0;assocs&#x00A0;looks&#x00A0;up&#x00A0;a&#x00A0;key&#x00A0;in&#x00A0;an&#x00A0;association&#x00A0;list.
&#x00A0;<br />lookup&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Eq&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;[(a,b)]&#x00A0;-&#x003E;&#x00A0;Maybe&#x00A0;b
&#x00A0;<br />lookup&#x00A0;key&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Nothing
&#x00A0;<br />lookup&#x00A0;key&#x00A0;((x,y):xys)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;key&#x00A0;==&#x00A0;x&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;Just&#x00A0;y
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;&#x00A0;=&#x00A0;&#x00A0;lookup&#x00A0;key&#x00A0;xys
</div>
<p class="noindent"> <a
id="dx16-172048"></a>
<div class="verbatim" id="verbatim-282">
--&#x00A0;sum&#x00A0;and&#x00A0;product&#x00A0;compute&#x00A0;the&#x00A0;sum&#x00A0;or&#x00A0;product&#x00A0;of&#x00A0;a&#x00A0;finite&#x00A0;list&#x00A0;of&#x00A0;numbers.
&#x00A0;<br />sum,&#x00A0;product&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Num&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />sum&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldl&#x00A0;(+)&#x00A0;0
&#x00A0;<br />product&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldl&#x00A0;(&#x22C6;)&#x00A0;1
</div>
<p class="noindent"> <a
id="dx16-172049"></a><a
id="dx16-172050"></a>
<div class="verbatim" id="verbatim-283">
--&#x00A0;maximum&#x00A0;and&#x00A0;minimum&#x00A0;return&#x00A0;the&#x00A0;maximum&#x00A0;or&#x00A0;minimum&#x00A0;value&#x00A0;from&#x00A0;a&#x00A0;list,
&#x00A0;<br />--&#x00A0;which&#x00A0;must&#x00A0;be&#x00A0;non-empty,&#x00A0;finite,&#x00A0;and&#x00A0;of&#x00A0;an&#x00A0;ordered&#x00A0;type.
&#x00A0;<br />maximum,&#x00A0;minimum&#x00A0;::&#x00A0;(Ord&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />maximum&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.maximum:&#x00A0;empty&#x00A0;list"
&#x00A0;<br />maximum&#x00A0;xs&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldl1&#x00A0;max&#x00A0;xs
</div>
<p class="noindent"> <a
id="dx16-172051"></a><a
id="dx16-172052"></a>
<div class="verbatim" id="verbatim-284">
minimum&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;error&#x00A0;"Prelude.minimum:&#x00A0;empty&#x00A0;list"
&#x00A0;<br />minimum&#x00A0;xs&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldl1&#x00A0;min&#x00A0;xs
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-285">
--&#x00A0;zip&#x00A0;takes&#x00A0;two&#x00A0;lists&#x00A0;and&#x00A0;returns&#x00A0;a&#x00A0;list&#x00A0;of&#x00A0;corresponding&#x00A0;pairs.&#x00A0;&#x00A0;If&#x00A0;one
&#x00A0;<br />--&#x00A0;input&#x00A0;list&#x00A0;is&#x00A0;short,&#x00A0;excess&#x00A0;elements&#x00A0;of&#x00A0;the&#x00A0;longer&#x00A0;list&#x00A0;are&#x00A0;discarded.
&#x00A0;<br />--&#x00A0;zip3&#x00A0;takes&#x00A0;three&#x00A0;lists&#x00A0;and&#x00A0;returns&#x00A0;a&#x00A0;list&#x00A0;of&#x00A0;triples.&#x00A0;&#x00A0;Zips&#x00A0;for&#x00A0;larger
&#x00A0;<br />--&#x00A0;tuples&#x00A0;are&#x00A0;in&#x00A0;the&#x00A0;List&#x00A0;library
&#x00A0;<br />
&#x00A0;<br />zip&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[b]&#x00A0;-&#x003E;&#x00A0;[(a,b)]
&#x00A0;<br />zip&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;zipWith&#x00A0;(,)
</div>
<p class="noindent"> <a
id="dx16-172053"></a>
<div class="verbatim" id="verbatim-286">
zip3&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;[b]&#x00A0;-&#x003E;&#x00A0;[c]&#x00A0;-&#x003E;&#x00A0;[(a,b,c)]
&#x00A0;<br />zip3&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;zipWith3&#x00A0;(,,)
</div>
<p class="noindent"> <a
id="dx16-172054"></a>
<div class="verbatim" id="verbatim-287">
--&#x00A0;The&#x00A0;zipWith&#x00A0;family&#x00A0;generalises&#x00A0;the&#x00A0;zip&#x00A0;family&#x00A0;by&#x00A0;zipping&#x00A0;with&#x00A0;the
&#x00A0;<br />--&#x00A0;function&#x00A0;given&#x00A0;as&#x00A0;the&#x00A0;first&#x00A0;argument,&#x00A0;instead&#x00A0;of&#x00A0;a&#x00A0;tupling&#x00A0;function.
&#x00A0;<br />--&#x00A0;For&#x00A0;example,&#x00A0;zipWith&#x00A0;(+)&#x00A0;is&#x00A0;applied&#x00A0;to&#x00A0;two&#x00A0;lists&#x00A0;to&#x00A0;produce&#x00A0;the&#x00A0;list
&#x00A0;<br />--&#x00A0;of&#x00A0;corresponding&#x00A0;sums.
&#x00A0;<br />
&#x00A0;<br />zipWith&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a-&#x003E;b-&#x003E;c)&#x00A0;-&#x003E;&#x00A0;[a]-&#x003E;[b]-&#x003E;[c]
&#x00A0;<br />zipWith&#x00A0;z&#x00A0;(a:as)&#x00A0;(b:bs)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;z&#x00A0;a&#x00A0;b&#x00A0;:&#x00A0;zipWith&#x00A0;z&#x00A0;as&#x00A0;bs
&#x00A0;<br />zipWith&#x00A0;_&#x00A0;_&#x00A0;_&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[]
</div>
<p class="noindent"> <a
id="dx16-172055"></a>
<div class="verbatim" id="verbatim-288">
zipWith3&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(a-&#x003E;b-&#x003E;c-&#x003E;d)&#x00A0;-&#x003E;&#x00A0;[a]-&#x003E;[b]-&#x003E;[c]-&#x003E;[d]
&#x00A0;<br />zipWith3&#x00A0;z&#x00A0;(a:as)&#x00A0;(b:bs)&#x00A0;(c:cs)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;z&#x00A0;a&#x00A0;b&#x00A0;c&#x00A0;:&#x00A0;zipWith3&#x00A0;z&#x00A0;as&#x00A0;bs&#x00A0;cs
&#x00A0;<br />zipWith3&#x00A0;_&#x00A0;_&#x00A0;_&#x00A0;_&#x00A0;=&#x00A0;&#x00A0;[]
</div>
<p class="noindent"> <a
id="dx16-172056"></a>
<div class="verbatim" id="verbatim-289">
--&#x00A0;unzip&#x00A0;transforms&#x00A0;a&#x00A0;list&#x00A0;of&#x00A0;pairs&#x00A0;into&#x00A0;a&#x00A0;pair&#x00A0;of&#x00A0;lists.
&#x00A0;<br />
&#x00A0;<br />unzip&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[(a,b)]&#x00A0;-&#x003E;&#x00A0;([a],[b])
&#x00A0;<br />unzip&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldr&#x00A0;(\(a,b)&#x00A0;~(as,bs)&#x00A0;-&#x003E;&#x00A0;(a:as,b:bs))&#x00A0;([],[])
</div>
<p class="noindent"> <a
id="dx16-172057"></a>
<div class="verbatim" id="verbatim-290">
unzip3&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[(a,b,c)]&#x00A0;-&#x003E;&#x00A0;([a],[b],[c])
&#x00A0;<br />unzip3&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;foldr&#x00A0;(\(a,b,c)&#x00A0;~(as,bs,cs)&#x00A0;-&#x003E;&#x00A0;(a:as,b:bs,c:cs))
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;([],[],[])
</div>
<p class="noindent"> <a
id="dx16-172058"></a>
<h3 class="sectionHead"><span class="titlemark">9.2 </span> <a
id="x16-1730009.2"></a>Prelude <span
class="pcrr7t-">PreludeText</span></h3>
<p class="noindent">
<div class="verbatim" id="verbatim-291">
module&#x00A0;PreludeText&#x00A0;(
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;ReadS,&#x00A0;ShowS,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Read(readsPrec,&#x00A0;readList),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;Show(showsPrec,&#x00A0;show,&#x00A0;showList),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;reads,&#x00A0;shows,&#x00A0;read,&#x00A0;lex,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showChar,&#x00A0;showString,&#x00A0;readParen,&#x00A0;showParen&#x00A0;)&#x00A0;where
</div>
<p class="noindent"> <a
id="dx16-173001"></a>
<div class="verbatim" id="verbatim-292">
--&#x00A0;The&#x00A0;instances&#x00A0;of&#x00A0;Read&#x00A0;and&#x00A0;Show&#x00A0;for
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Bool,&#x00A0;Maybe,&#x00A0;Either,&#x00A0;Ordering
&#x00A0;<br />--&#x00A0;are&#x00A0;done&#x00A0;via&#x00A0;"deriving"&#x00A0;clauses&#x00A0;in&#x00A0;Prelude.hs
&#x00A0;<br />
&#x00A0;<br />import&#x00A0;Data.Char(isSpace,&#x00A0;isAlpha,&#x00A0;isDigit,&#x00A0;isAlphaNum,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;showLitChar,&#x00A0;readLitChar,&#x00A0;lexLitChar)
</div>
<p class="noindent"> <a
id="dx16-173002"></a>
<div class="verbatim" id="verbatim-293">
import&#x00A0;Numeric(showSigned,&#x00A0;showInt,&#x00A0;readSigned,&#x00A0;readDec,&#x00A0;showFloat,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;readFloat,&#x00A0;lexDigits)
</div>
<p class="noindent"> <a
id="dx16-173003"></a>
<div class="verbatim" id="verbatim-294">
type&#x00A0;&#x00A0;ReadS&#x00A0;a&#x00A0;&#x00A0;=&#x00A0;String&#x00A0;-&#x003E;&#x00A0;[(a,String)]
&#x00A0;<br />type&#x00A0;&#x00A0;ShowS&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;String&#x00A0;-&#x003E;&#x00A0;String
</div>
<p class="noindent"> <a
id="dx16-173004"></a>
<div class="verbatim" id="verbatim-295">
class&#x00A0;&#x00A0;Read&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;ReadS&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readList&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;ReadS&#x00A0;[a]
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Minimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readList&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readParen&#x00A0;False&#x00A0;(\r&#x00A0;-&#x003E;&#x00A0;[pr&#x00A0;|&#x00A0;("[",s)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;r,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;pr&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;readl&#x00A0;s])
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;readl&#x00A0;&#x00A0;s&#x00A0;=&#x00A0;[([],t)&#x00A0;&#x00A0;&#x00A0;|&#x00A0;("]",t)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;s]&#x00A0;++
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[(x:xs,u)&#x00A0;|&#x00A0;(x,t)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;reads&#x00A0;s,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(xs,u)&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;readl'&#x00A0;t]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;readl'&#x00A0;s&#x00A0;=&#x00A0;[([],t)&#x00A0;&#x00A0;&#x00A0;|&#x00A0;("]",t)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;s]&#x00A0;++
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[(x:xs,v)&#x00A0;|&#x00A0;(",",t)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;s,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(x,u)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;reads&#x00A0;t,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(xs,v)&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;readl'&#x00A0;u]
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-296">
class&#x00A0;&#x00A0;Show&#x00A0;a&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Int&#x00A0;-&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;ShowS
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;show&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;a&#x00A0;-&#x003E;&#x00A0;String
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showList&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;[a]&#x00A0;-&#x003E;&#x00A0;ShowS
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Mimimal&#x00A0;complete&#x00A0;definition:
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;show&#x00A0;or&#x00A0;showsPrec
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;_&#x00A0;x&#x00A0;s&#x00A0;&#x00A0;&#x00A0;=&#x00A0;show&#x00A0;x&#x00A0;++&#x00A0;s
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;show&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showsPrec&#x00A0;0&#x00A0;x&#x00A0;""
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showList&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showString&#x00A0;"[]"
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showList&#x00A0;(x:xs)&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showChar&#x00A0;'['&#x00A0;.&#x00A0;shows&#x00A0;x&#x00A0;.&#x00A0;showl&#x00A0;xs
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;showl&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showChar&#x00A0;']'
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;showl&#x00A0;(x:xs)&#x00A0;=&#x00A0;showChar&#x00A0;','&#x00A0;.&#x00A0;shows&#x00A0;x&#x00A0;.
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;showl&#x00A0;xs
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-297">
reads&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Read&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;ReadS&#x00A0;a
&#x00A0;<br />reads&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;readsPrec&#x00A0;0
</div>
<p class="noindent"> <a
id="dx16-173005"></a>
<div class="verbatim" id="verbatim-298">
shows&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Show&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;ShowS
&#x00A0;<br />shows&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;showsPrec&#x00A0;0
</div>
<p class="noindent"> <a
id="dx16-173006"></a>
<div class="verbatim" id="verbatim-299">
read&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;(Read&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;String&#x00A0;-&#x003E;&#x00A0;a
&#x00A0;<br />read&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;case&#x00A0;[x&#x00A0;|&#x00A0;(x,t)&#x00A0;&#x003C;-&#x00A0;reads&#x00A0;s,&#x00A0;("","")&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;t]&#x00A0;of
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[x]&#x00A0;-&#x003E;&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[]&#x00A0;&#x00A0;-&#x003E;&#x00A0;error&#x00A0;"Prelude.read:&#x00A0;no&#x00A0;parse"
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;_&#x00A0;&#x00A0;&#x00A0;-&#x003E;&#x00A0;error&#x00A0;"Prelude.read:&#x00A0;ambiguous&#x00A0;parse"
</div>
<p class="noindent"> <a
id="dx16-173007"></a>
<div class="verbatim" id="verbatim-300">
showChar&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Char&#x00A0;-&#x003E;&#x00A0;ShowS
&#x00A0;<br />showChar&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;(:)
</div>
<p class="noindent"> <a
id="dx16-173008"></a>
<div class="verbatim" id="verbatim-301">
showString&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;String&#x00A0;-&#x003E;&#x00A0;ShowS
&#x00A0;<br />showString&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;(++)
</div>
<p class="noindent"> <a
id="dx16-173009"></a>
<div class="verbatim" id="verbatim-302">
showParen&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Bool&#x00A0;-&#x003E;&#x00A0;ShowS&#x00A0;-&#x003E;&#x00A0;ShowS
&#x00A0;<br />showParen&#x00A0;b&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;if&#x00A0;b&#x00A0;then&#x00A0;showChar&#x00A0;'('&#x00A0;.&#x00A0;p&#x00A0;.&#x00A0;showChar&#x00A0;')'&#x00A0;else&#x00A0;p
</div>
<p class="noindent"> <a
id="dx16-173010"></a>
<div class="verbatim" id="verbatim-303">
readParen&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Bool&#x00A0;-&#x003E;&#x00A0;ReadS&#x00A0;a&#x00A0;-&#x003E;&#x00A0;ReadS&#x00A0;a
&#x00A0;<br />readParen&#x00A0;b&#x00A0;g&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;if&#x00A0;b&#x00A0;then&#x00A0;mandatory&#x00A0;else&#x00A0;optional
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;optional&#x00A0;r&#x00A0;&#x00A0;=&#x00A0;g&#x00A0;r&#x00A0;++&#x00A0;mandatory&#x00A0;r
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;mandatory&#x00A0;r&#x00A0;=&#x00A0;[(x,u)&#x00A0;|&#x00A0;("(",s)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;r,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(x,t)&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;optional&#x00A0;s,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(")",u)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;t&#x00A0;&#x00A0;&#x00A0;&#x00A0;]
</div>
<p class="noindent"> <a
id="dx16-173011"></a>
<div class="verbatim" id="verbatim-304">
--&#x00A0;This&#x00A0;lexer&#x00A0;is&#x00A0;not&#x00A0;completely&#x00A0;faithful&#x00A0;to&#x00A0;the&#x00A0;Haskell&#x00A0;lexical&#x00A0;syntax.
&#x00A0;<br />--&#x00A0;Current&#x00A0;limitations:
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;Qualified&#x00A0;names&#x00A0;are&#x00A0;not&#x00A0;handled&#x00A0;properly
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;Octal&#x00A0;and&#x00A0;hexidecimal&#x00A0;numerics&#x00A0;are&#x00A0;not&#x00A0;recognized&#x00A0;as&#x00A0;a&#x00A0;single&#x00A0;token
&#x00A0;<br />--&#x00A0;&#x00A0;&#x00A0;&#x00A0;Comments&#x00A0;are&#x00A0;not&#x00A0;treated&#x00A0;properly
&#x00A0;<br />
&#x00A0;<br />lex&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;ReadS&#x00A0;String
&#x00A0;<br />lex&#x00A0;""&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[("","")]
&#x00A0;<br />lex&#x00A0;(c:s)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;|&#x00A0;isSpace&#x00A0;c&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;lex&#x00A0;(dropWhile&#x00A0;isSpace&#x00A0;s)
&#x00A0;<br />lex&#x00A0;('\'':s)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[('\'':ch++"'",&#x00A0;t)&#x00A0;|&#x00A0;(ch,'\'':t)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lexLitChar&#x00A0;s,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ch&#x00A0;/=&#x00A0;"'"&#x00A0;]
&#x00A0;<br />lex&#x00A0;('"':s)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[('"':str,&#x00A0;t)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;(str,t)&#x00A0;&#x003C;-&#x00A0;lexString&#x00A0;s]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexString&#x00A0;('"':s)&#x00A0;=&#x00A0;[("\"",s)]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexString&#x00A0;s&#x00A0;=&#x00A0;[(ch++str,&#x00A0;u)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;(ch,t)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lexStrItem&#x00A0;s,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(str,u)&#x00A0;&#x003C;-&#x00A0;lexString&#x00A0;t&#x00A0;&#x00A0;]
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexStrItem&#x00A0;('\\':'&amp;':s)&#x00A0;=&#x00A0;&#x00A0;[("\\&amp;",s)]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexStrItem&#x00A0;('\\':c:s)&#x00A0;|&#x00A0;isSpace&#x00A0;c
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;[("\\&amp;",t)&#x00A0;|
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;'\\':t&#x00A0;&#x003C;-
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[dropWhile&#x00A0;isSpace&#x00A0;s]]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexStrItem&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;lexLitChar&#x00A0;s
</div>
<p class="noindent"> <a
id="dx16-173012"></a>
<div class="verbatim" id="verbatim-305">
lex&#x00A0;(c:s)&#x00A0;|&#x00A0;isSingle&#x00A0;c&#x00A0;=&#x00A0;[([c],s)]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;isSym&#x00A0;c&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[(c:sym,t)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;(sym,t)&#x00A0;&#x003C;-&#x00A0;[span&#x00A0;isSym&#x00A0;s]]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;isAlpha&#x00A0;c&#x00A0;&#x00A0;=&#x00A0;[(c:nam,t)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;(nam,t)&#x00A0;&#x003C;-&#x00A0;[span&#x00A0;isIdChar&#x00A0;s]]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;isDigit&#x00A0;c&#x00A0;&#x00A0;=&#x00A0;[(c:ds++fe,t)&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;(ds,s)&#x00A0;&#x00A0;&#x003C;-&#x00A0;[span&#x00A0;isDigit&#x00A0;s],
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(fe,t)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lexFracExp&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;|&#x00A0;otherwise&#x00A0;&#x00A0;=&#x00A0;[]&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;bad&#x00A0;character
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;isSingle&#x00A0;c&#x00A0;=&#x00A0;&#x00A0;c&#x00A0;&#8216;elem&#8216;&#x00A0;",;()[]{}_&#8216;"
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;isSym&#x00A0;c&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;c&#x00A0;&#8216;elem&#8216;&#x00A0;"!@#$%&amp;&#x22C6;+./&#x003C;=&#x003E;?\\^|:-~"
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;isIdChar&#x00A0;c&#x00A0;=&#x00A0;&#x00A0;isAlphaNum&#x00A0;c&#x00A0;||&#x00A0;c&#x00A0;&#8216;elem&#8216;&#x00A0;"_'"
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexFracExp&#x00A0;('.':c:cs)&#x00A0;|&#x00A0;isDigit&#x00A0;c
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[('.':ds++e,u)&#x00A0;|&#x00A0;(ds,t)&#x00A0;&#x003C;-&#x00A0;lexDigits&#x00A0;(c:cs),
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(e,u)&#x00A0;&#x00A0;&#x003C;-&#x00A0;lexExp&#x00A0;t]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexFracExp&#x00A0;s&#x00A0;&#x00A0;=&#x00A0;lexExp&#x00A0;s
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexExp&#x00A0;(e:s)&#x00A0;|&#x00A0;e&#x00A0;&#8216;elem&#8216;&#x00A0;"eE"
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[(e:c:ds,u)&#x00A0;|&#x00A0;(c:t)&#x00A0;&#x00A0;&#x003C;-&#x00A0;[s],&#x00A0;c&#x00A0;&#8216;elem&#8216;&#x00A0;"+-",
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(ds,u)&#x00A0;&#x003C;-&#x00A0;lexDigits&#x00A0;t]&#x00A0;++
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[(e:ds,t)&#x00A0;&#x00A0;&#x00A0;|&#x00A0;(ds,t)&#x00A0;&#x003C;-&#x00A0;lexDigits&#x00A0;s]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;lexExp&#x00A0;s&#x00A0;=&#x00A0;[("",s)]
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-306">
instance&#x00A0;&#x00A0;Show&#x00A0;Int&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;n&#x00A0;=&#x00A0;showsPrec&#x00A0;n&#x00A0;.&#x00A0;toInteger
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Converting&#x00A0;to&#x00A0;Integer&#x00A0;avoids
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;possible&#x00A0;difficulty&#x00A0;with&#x00A0;minInt
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-307">
instance&#x00A0;&#x00A0;Read&#x00A0;Int&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;r&#x00A0;=&#x00A0;[(fromInteger&#x00A0;i,&#x00A0;t)&#x00A0;|&#x00A0;(i,t)&#x00A0;&#x003C;-&#x00A0;readsPrec&#x00A0;p&#x00A0;r]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;Reading&#x00A0;at&#x00A0;the&#x00A0;Integer&#x00A0;type&#x00A0;avoids
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;possible&#x00A0;difficulty&#x00A0;with&#x00A0;minInt
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-308">
instance&#x00A0;&#x00A0;Show&#x00A0;Integer&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showSigned&#x00A0;showInt
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-309">
instance&#x00A0;&#x00A0;Read&#x00A0;Integer&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readSigned&#x00A0;readDec
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-310">
instance&#x00A0;&#x00A0;Show&#x00A0;Float&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showFloat
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-311">
instance&#x00A0;&#x00A0;Read&#x00A0;Float&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readSigned&#x00A0;readFloat
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-312">
instance&#x00A0;&#x00A0;Show&#x00A0;Double&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showFloat
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-313">
instance&#x00A0;&#x00A0;Read&#x00A0;Double&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readSigned&#x00A0;readFloat
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-314">
instance&#x00A0;&#x00A0;Show&#x00A0;()&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;p&#x00A0;()&#x00A0;=&#x00A0;showString&#x00A0;"()"
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-315">
instance&#x00A0;Read&#x00A0;()&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readParen&#x00A0;False
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(\r&#x00A0;-&#x003E;&#x00A0;[((),t)&#x00A0;|&#x00A0;("(",s)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;r,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(")",t)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;s&#x00A0;]&#x00A0;)
&#x00A0;<br />instance&#x00A0;&#x00A0;Show&#x00A0;Char&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;p&#x00A0;'\''&#x00A0;=&#x00A0;showString&#x00A0;"'\\''"
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;p&#x00A0;c&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showChar&#x00A0;'\''&#x00A0;.&#x00A0;showLitChar&#x00A0;c&#x00A0;.&#x00A0;showChar&#x00A0;'\''
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showList&#x00A0;cs&#x00A0;=&#x00A0;showChar&#x00A0;'"'&#x00A0;.&#x00A0;showl&#x00A0;cs
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;showl&#x00A0;""&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showChar&#x00A0;'"'
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;showl&#x00A0;('"':cs)&#x00A0;=&#x00A0;showString&#x00A0;"\\\""&#x00A0;.&#x00A0;showl&#x00A0;cs
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;showl&#x00A0;(c:cs)&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showLitChar&#x00A0;c&#x00A0;.&#x00A0;showl&#x00A0;cs
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-316">
instance&#x00A0;&#x00A0;Read&#x00A0;Char&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readParen&#x00A0;False
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(\r&#x00A0;-&#x003E;&#x00A0;[(c,t)&#x00A0;|&#x00A0;('\'':s,t)&#x003C;-&#x00A0;lex&#x00A0;r,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(c,"\'")&#x00A0;&#x00A0;&#x003C;-&#x00A0;readLitChar&#x00A0;s])
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readList&#x00A0;=&#x00A0;readParen&#x00A0;False&#x00A0;(\r&#x00A0;-&#x003E;&#x00A0;[(l,t)&#x00A0;|&#x00A0;('"':s,&#x00A0;t)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;r,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(l,_)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;readl&#x00A0;s&#x00A0;])
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;where&#x00A0;readl&#x00A0;('"':s)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[("",s)]
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;readl&#x00A0;('\\':'&amp;':s)&#x00A0;=&#x00A0;readl&#x00A0;s
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;readl&#x00A0;s&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;[(c:cs,u)&#x00A0;|&#x00A0;(c&#x00A0;,t)&#x00A0;&#x003C;-&#x00A0;readLitChar&#x00A0;s,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(cs,u)&#x00A0;&#x003C;-&#x00A0;readl&#x00A0;t&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;]
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-317">
instance&#x00A0;&#x00A0;(Show&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Show&#x00A0;[a]&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;showList
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-318">
instance&#x00A0;&#x00A0;(Read&#x00A0;a)&#x00A0;=&#x003E;&#x00A0;Read&#x00A0;[a]&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readList
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-319">
--&#x00A0;Tuples
&#x00A0;<br />
&#x00A0;<br />instance&#x00A0;&#x00A0;(Show&#x00A0;a,&#x00A0;Show&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;Show&#x00A0;(a,b)&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;showsPrec&#x00A0;p&#x00A0;(x,y)&#x00A0;=&#x00A0;showChar&#x00A0;'('&#x00A0;.&#x00A0;shows&#x00A0;x&#x00A0;.&#x00A0;showChar&#x00A0;','&#x00A0;.
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;shows&#x00A0;y&#x00A0;.&#x00A0;showChar&#x00A0;')'
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-320">
instance&#x00A0;&#x00A0;(Read&#x00A0;a,&#x00A0;Read&#x00A0;b)&#x00A0;=&#x003E;&#x00A0;Read&#x00A0;(a,b)&#x00A0;&#x00A0;where
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readsPrec&#x00A0;p&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;readParen&#x00A0;False
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(\r&#x00A0;-&#x003E;&#x00A0;[((x,y),&#x00A0;w)&#x00A0;|&#x00A0;("(",s)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;r,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(x,t)&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;reads&#x00A0;s,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(",",u)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;t,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(y,v)&#x00A0;&#x00A0;&#x00A0;&#x003C;-&#x00A0;reads&#x00A0;u,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;(")",w)&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;v&#x00A0;]&#x00A0;)
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-321">
--&#x00A0;Other&#x00A0;tuples&#x00A0;have&#x00A0;similar&#x00A0;Read&#x00A0;and&#x00A0;Show&#x00A0;instances
&#x00A0;<br />
&#x00A0;<br />
</div>
<p class="noindent">
<h3 class="sectionHead"><span class="titlemark">9.3 </span> <a
id="x16-1740009.3"></a>Prelude <span
class="pcrr7t-">PreludeIO</span></h3>
<p class="noindent">
<div class="verbatim" id="verbatim-322">
module&#x00A0;PreludeIO&#x00A0;(
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;FilePath,&#x00A0;IOError,&#x00A0;ioError,&#x00A0;userError,&#x00A0;catch,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;putChar,&#x00A0;putStr,&#x00A0;putStrLn,&#x00A0;print,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;getChar,&#x00A0;getLine,&#x00A0;getContents,&#x00A0;interact,
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;readFile,&#x00A0;writeFile,&#x00A0;appendFile,&#x00A0;readIO,&#x00A0;readLn
&#x00A0;<br />&#x00A0;&#x00A0;)&#x00A0;where
</div>
<p class="noindent"> <a
id="dx16-174001"></a>
<div class="verbatim" id="verbatim-323">
import&#x00A0;PreludeBuiltin
</div>
<p class="noindent"> <a
id="dx16-174002"></a>
<div class="verbatim" id="verbatim-324">
type&#x00A0;&#x00A0;FilePath&#x00A0;=&#x00A0;String
</div>
<p class="noindent"> <a
id="dx16-174003"></a>
<div class="verbatim" id="verbatim-325">
data&#x00A0;IOError&#x00A0;&#x00A0;&#x00A0;&#x00A0;--&#x00A0;The&#x00A0;internals&#x00A0;of&#x00A0;this&#x00A0;type&#x00A0;are&#x00A0;system&#x00A0;dependent
</div>
<p class="noindent"> <a
id="dx16-174004"></a>
<div class="verbatim" id="verbatim-326">
instance&#x00A0;&#x00A0;Show&#x00A0;IOError&#x00A0;&#x00A0;where&#x00A0;...
&#x00A0;<br />instance&#x00A0;&#x00A0;Eq&#x00A0;IOError&#x00A0;&#x00A0;where&#x00A0;...
</div>
<p class="noindent">
<div class="verbatim" id="verbatim-327">
ioError&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;&#x00A0;IOError&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;a
&#x00A0;<br />ioError&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;&#x00A0;primIOError
</div>
<p class="noindent"> <a
id="dx16-174005"></a>
<div class="verbatim" id="verbatim-328">
userError&#x00A0;&#x00A0;::&#x00A0;&#x00A0;String&#x00A0;-&#x003E;&#x00A0;IOError
&#x00A0;<br />userError&#x00A0;&#x00A0;=&#x00A0;&#x00A0;&#x00A0;primUserError
</div>
<p class="noindent"> <a
id="dx16-174006"></a>
<div class="verbatim" id="verbatim-329">
catch&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;&#x00A0;IO&#x00A0;a&#x00A0;-&#x003E;&#x00A0;(IOError&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;a)&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;a
&#x00A0;<br />catch&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;&#x00A0;primCatch
</div>
<p class="noindent"> <a
id="dx16-174007"></a>
<div class="verbatim" id="verbatim-330">
putChar&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Char&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;()
&#x00A0;<br />putChar&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;primPutChar
</div>
<p class="noindent"> <a
id="dx16-174008"></a>
<div class="verbatim" id="verbatim-331">
putStr&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;String&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;()
&#x00A0;<br />putStr&#x00A0;s&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;mapM_&#x00A0;putChar&#x00A0;s
</div>
<p class="noindent"> <a
id="dx16-174009"></a>
<div class="verbatim" id="verbatim-332">
putStrLn&#x00A0;&#x00A0;&#x00A0;::&#x00A0;String&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;()
&#x00A0;<br />putStrLn&#x00A0;s&#x00A0;=&#x00A0;&#x00A0;do&#x00A0;putStr&#x00A0;s
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;putStr&#x00A0;"\n"
</div>
<p class="noindent"> <a
id="dx16-174010"></a>
<div class="verbatim" id="verbatim-333">
print&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Show&#x00A0;a&#x00A0;=&#x003E;&#x00A0;a&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;()
&#x00A0;<br />print&#x00A0;x&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;putStrLn&#x00A0;(show&#x00A0;x)
</div>
<p class="noindent"> <a
id="dx16-174011"></a>
<div class="verbatim" id="verbatim-334">
getChar&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;IO&#x00A0;Char
&#x00A0;<br />getChar&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;primGetChar
</div>
<p class="noindent"> <a
id="dx16-174012"></a>
<div class="verbatim" id="verbatim-335">
getLine&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;IO&#x00A0;String
&#x00A0;<br />getLine&#x00A0;&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;do&#x00A0;c&#x00A0;&#x003C;-&#x00A0;getChar
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;if&#x00A0;c&#x00A0;==&#x00A0;'\n'&#x00A0;then&#x00A0;return&#x00A0;""&#x00A0;else
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;do&#x00A0;s&#x00A0;&#x003C;-&#x00A0;getLine
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;return&#x00A0;(c:s)
</div>
<p class="noindent"> <a
id="dx16-174013"></a>
<div class="verbatim" id="verbatim-336">
getContents&#x00A0;::&#x00A0;IO&#x00A0;String
&#x00A0;<br />getContents&#x00A0;=&#x00A0;&#x00A0;primGetContents
</div>
<p class="noindent"> <a
id="dx16-174014"></a>
<div class="verbatim" id="verbatim-337">
interact&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;&#x00A0;(String&#x00A0;-&#x003E;&#x00A0;String)&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;()
&#x00A0;<br />--&#x00A0;The&#x00A0;hSetBuffering&#x00A0;ensures&#x00A0;the&#x00A0;expected&#x00A0;interactive&#x00A0;behaviour
&#x00A0;<br />interact&#x00A0;f&#x00A0;&#x00A0;=&#x00A0;&#x00A0;do&#x00A0;hSetBuffering&#x00A0;stdin&#x00A0;&#x00A0;NoBuffering
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;hSetBuffering&#x00A0;stdout&#x00A0;NoBuffering
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;s&#x00A0;&#x003C;-&#x00A0;getContents
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;putStr&#x00A0;(f&#x00A0;s)
</div>
<p class="noindent"> <a
id="dx16-174015"></a>
<div class="verbatim" id="verbatim-338">
readFile&#x00A0;&#x00A0;&#x00A0;::&#x00A0;FilePath&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;String
&#x00A0;<br />readFile&#x00A0;&#x00A0;&#x00A0;=&#x00A0;&#x00A0;primReadFile
</div>
<p class="noindent"> <a
id="dx16-174016"></a>
<div class="verbatim" id="verbatim-339">
writeFile&#x00A0;&#x00A0;::&#x00A0;FilePath&#x00A0;-&#x003E;&#x00A0;String&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;()
&#x00A0;<br />writeFile&#x00A0;&#x00A0;=&#x00A0;&#x00A0;primWriteFile
</div>
<p class="noindent"> <a
id="dx16-174017"></a>
<div class="verbatim" id="verbatim-340">
appendFile&#x00A0;::&#x00A0;FilePath&#x00A0;-&#x003E;&#x00A0;String&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;()
&#x00A0;<br />appendFile&#x00A0;=&#x00A0;&#x00A0;primAppendFile
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;--&#x00A0;raises&#x00A0;an&#x00A0;exception&#x00A0;instead&#x00A0;of&#x00A0;an&#x00A0;error
&#x00A0;<br />readIO&#x00A0;&#x00A0;&#x00A0;::&#x00A0;Read&#x00A0;a&#x00A0;=&#x003E;&#x00A0;String&#x00A0;-&#x003E;&#x00A0;IO&#x00A0;a
&#x00A0;<br />readIO&#x00A0;s&#x00A0;=&#x00A0;&#x00A0;case&#x00A0;[x&#x00A0;|&#x00A0;(x,t)&#x00A0;&#x003C;-&#x00A0;reads&#x00A0;s,&#x00A0;("","")&#x00A0;&#x003C;-&#x00A0;lex&#x00A0;t]&#x00A0;of
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[x]&#x00A0;-&#x003E;&#x00A0;return&#x00A0;x
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;[]&#x00A0;&#x00A0;-&#x003E;&#x00A0;ioError&#x00A0;(userError&#x00A0;"Prelude.readIO:&#x00A0;no&#x00A0;parse")
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;_&#x00A0;&#x00A0;&#x00A0;-&#x003E;&#x00A0;ioError&#x00A0;(userError&#x00A0;"Prelude.readIO:&#x00A0;ambiguous&#x00A0;parse")
</div>
<p class="noindent"> <a
id="dx16-174018"></a>
<div class="verbatim" id="verbatim-341">
readLn&#x00A0;::&#x00A0;Read&#x00A0;a&#x00A0;=&#x003E;&#x00A0;IO&#x00A0;a
&#x00A0;<br />readLn&#x00A0;=&#x00A0;&#x00A0;do&#x00A0;l&#x00A0;&#x003C;-&#x00A0;getLine
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;r&#x00A0;&#x003C;-&#x00A0;readIO&#x00A0;l
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;return&#x00A0;r
</div>
<p class="noindent"> <a
id="dx16-174019"></a>
<!--l. 6--><div class="crosslinks"><p class="noindent">[<a
href="haskellch10.html" >next</a>] [<a
href="haskellch8.html" >prev</a>] [<a
href="haskellch8.html#tailhaskellch8.html" >prev-tail</a>] [<a
href="haskellch9.html" >front</a>] [<a
href="haskellpa1.html#haskellch9.html" >up</a>] </p></div>
<p class="noindent"> <a
id="tailhaskellch9.html"></a>
</body></html>