1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="AsciiDoc 8.6.8">
<title>OptionalArguments</title>
<link rel="stylesheet" href="./asciidoc.css" type="text/css">
<link rel="stylesheet" href="./pygments.css" type="text/css">
<script type="text/javascript" src="./asciidoc.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
asciidoc.install();
/*]]>*/
</script>
<link rel="stylesheet" href="./mlton.css" type="text/css"/>
</head>
<body class="article">
<div id="banner">
<div id="banner-home">
<a href="./Home">MLton 20130715</a>
</div>
</div>
<div id="header">
<h1>OptionalArguments</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p><a href="StandardML">Standard ML</a> does not have built-in support for optional
arguments. Nevertheless, using <a href="Fold">Fold</a>, it is easy to define
functions that take optional arguments.</p></div>
<div class="paragraph"><p>For example, suppose that we have the following definition of a
function <span class="monospaced">f</span>.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">fun</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">,</span><span class="w"> </span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="n">concat</span><span class="w"> </span><span class="p">[</span><span class="n">Int</span><span class="p">.</span><span class="n">toString</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="s">", "</span><span class="p">,</span><span class="w"> </span><span class="n">Real</span><span class="p">.</span><span class="n">toString</span><span class="w"> </span><span class="n">r</span><span class="p">,</span><span class="w"> </span><span class="s">", "</span><span class="p">,</span><span class="w"> </span><span class="n">s</span><span class="p">]</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>Using the <span class="monospaced">OptionalArg</span> structure described below, we can define a
function <span class="monospaced">f'</span>, an optionalized version of <span class="monospaced">f</span>, that takes 0, 1, 2, or
3 arguments. Embedded within <span class="monospaced">f'</span> will be default values for <span class="monospaced">i</span>,
<span class="monospaced">r</span>, and <span class="monospaced">s</span>. If <span class="monospaced">f'</span> gets no arguments, then all the defaults are
used. If <span class="monospaced">f'</span> gets one argument, then that will be used for <span class="monospaced">i</span>. Two
arguments will be used for <span class="monospaced">i</span> and <span class="monospaced">r</span> respectively. Three arguments
will override all default values. Calls to <span class="monospaced">f'</span> will look like the
following.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="n">f'</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="n">f'</span><span class="w"> </span><span class="n">`</span><span class="mi">2</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="n">f'</span><span class="w"> </span><span class="n">`</span><span class="mi">2</span><span class="w"> </span><span class="n">`</span><span class="mf">3.0</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="n">f'</span><span class="w"> </span><span class="n">`</span><span class="mi">2</span><span class="w"> </span><span class="n">`</span><span class="mf">3.0</span><span class="w"> </span><span class="n">`</span><span class="s">"four"</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>The optional argument indicator, <span class="monospaced">`</span>, is not special syntax ---
it is a normal SML value, defined in the <span class="monospaced">OptionalArg</span> structure
below.</p></div>
<div class="paragraph"><p>Here is the definition of <span class="monospaced">f'</span> using the <span class="monospaced">OptionalArg</span> structure, in
particular, <span class="monospaced">OptionalArg.make</span> and <span class="monospaced">OptionalArg.D</span>.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">val</span><span class="w"> </span><span class="n">f'</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="k">open</span><span class="w"> </span><span class="n">OptionalArg</span><span class="w"> </span><span class="k">in</span><span class="w"></span>
<span class="w"> </span><span class="n">make</span><span class="w"> </span><span class="p">(</span><span class="n">D</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">D</span><span class="w"> </span><span class="mf">2.0</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">D</span><span class="w"> </span><span class="s">"three"</span><span class="p">)</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">,</span><span class="w"> </span><span class="n">s</span><span class="p">))</span><span class="w"></span>
<span class="w"> </span><span class="n">z</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>The definition of <span class="monospaced">f'</span> is eta expanded as with all uses of fold. A
call to <span class="monospaced">OptionalArg.make</span> is supplied with a variable number of
defaults (in this case, three), the end-of-arguments terminator, <span class="monospaced">$</span>,
and the function to run, taking its arguments as an n-ary
<a href="ProductType">product</a>. In this case, the function simply converts
the product to an ordinary tuple and calls <span class="monospaced">f</span>. Often, the function
body will simply be written directly.</p></div>
<div class="paragraph"><p>In general, the definition of an optional-argument function looks like
the following.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">val</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="k">open</span><span class="w"> </span><span class="n">OptionalArg</span><span class="w"> </span><span class="k">in</span><span class="w"></span>
<span class="w"> </span><span class="n">make</span><span class="w"> </span><span class="p">(</span><span class="n">D</span><span class="w"> </span><span class="n"><default1></span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">D</span><span class="w"> </span><span class="n"><default2></span><span class="p">)</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="p">(</span><span class="n">D</span><span class="w"> </span><span class="n"><defaultn></span><span class="p">)</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="n">x1</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">x2</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">xn</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="n"><function</span><span class="w"> </span><span class="n">code</span><span class="w"> </span><span class="n">goes</span><span class="w"> </span><span class="n">here></span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="n">z</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>Here is the definition of <span class="monospaced">OptionalArg</span>.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">structure</span><span class="w"> </span><span class="n">OptionalArg</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="k">struct</span><span class="w"></span>
<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">make</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="n">Fold</span><span class="p">.</span><span class="n">fold</span><span class="w"></span>
<span class="w"> </span><span class="p">((</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="n">x</span><span class="p">),</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="p">(</span><span class="n">d</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="n">Fold</span><span class="p">.</span><span class="n">fold</span><span class="w"> </span><span class="p">((</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="p">()),</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="p">,</span><span class="w"> </span><span class="n">d</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="k">let</span><span class="w"></span>
<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="n">d</span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="k">in</span><span class="w"></span>
<span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="n">d</span><span class="w"></span>
<span class="w"> </span><span class="k">end</span><span class="p">))</span><span class="w"></span>
<span class="w"> </span><span class="n">z</span><span class="w"></span>
<span class="w"> </span><span class="k">fun</span><span class="w"> </span><span class="n">D</span><span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Fold</span><span class="p">.</span><span class="n">step0</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="n">ds</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">d</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">ds</span><span class="p">),</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">)))</span><span class="w"></span>
<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">`</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="n">Fold</span><span class="p">.</span><span class="n">step1</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="p">,</span><span class="w"> </span><span class="p">_</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">d</span><span class="p">))</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">d</span><span class="p">),</span><span class="w"> </span><span class="n">d</span><span class="p">))</span><span class="w"></span>
<span class="w"> </span><span class="n">z</span><span class="w"></span>
<span class="w"> </span><span class="k">end</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p><span class="monospaced">OptionalArg.make</span> uses a nested fold. The first <span class="monospaced">fold</span> accumulates
the default values in a product, associated to the right, and a
reversal function that converts a product (of the same arity as the
number of defaults) from right associativity to left associativity.
The accumulated defaults are used by the second fold, which recurs
over the product, replacing the appropriate component as it encounters
optional arguments. The second fold also constructs a "fill"
function, <span class="monospaced">f</span>, that is used to reconstruct the product once the
end-of-arguments is reached. Finally, the finisher reconstructs the
product and uses the reversal function to convert the product from
right associative to left associative, at which point it is passed to
the user-supplied function.</p></div>
<div class="paragraph"><p>Much of the complexity comes from the fact that while recurring over a
product from left to right, one wants it to be right-associative,
e.g., look like</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="n">a</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="p">(</span><span class="n">b</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="p">(</span><span class="n">c</span><span class="w"> </span><span class="n">&</span><span class="w"> </span><span class="n">d</span><span class="p">))</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>but the user function in the end wants the product to be left
associative, so that the product argument pattern can be written
without parentheses (since <span class="monospaced">&</span> is left associative).</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_labelled_optional_arguments">Labelled optional arguments</h2>
<div class="sectionbody">
<div class="paragraph"><p>In addition to the positional optional arguments described above, it
is sometimes useful to have labelled optional arguments. These allow
one to define a function, <span class="monospaced">f</span>, with defaults, say <span class="monospaced">a</span> and <span class="monospaced">b</span>. Then,
a caller of <span class="monospaced">f</span> can supply values for <span class="monospaced">a</span> and <span class="monospaced">b</span> by name. If no
value is supplied then the default is used.</p></div>
<div class="paragraph"><p>Labelled optional arguments are a simple extension of
<a href="FunctionalRecordUpdate">FunctionalRecordUpdate</a> using post composition. Suppose, for
example, that one wants a function <span class="monospaced">f</span> with labelled optional
arguments <span class="monospaced">a</span> and <span class="monospaced">b</span> with default values <span class="monospaced">0</span> and <span class="monospaced">0.0</span> respectively.
If one has a functional-record-update function <span class="monospaced">updateAB</span> for records
with <span class="monospaced">a</span> and <span class="monospaced">b</span> fields, then one can define <span class="monospaced">f</span> in the following way.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">val</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="n">Fold</span><span class="p">.</span><span class="n">post</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="n">updateAB</span><span class="w"> </span><span class="p">{</span><span class="n">a</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mf">0.0</span><span class="p">},</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="p">{</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">}</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="n">print</span><span class="w"> </span><span class="p">(</span><span class="n">concat</span><span class="w"> </span><span class="p">[</span><span class="n">Int</span><span class="p">.</span><span class="n">toString</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="s">" "</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">Real</span><span class="p">.</span><span class="n">toString</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">]))</span><span class="w"></span>
<span class="w"> </span><span class="n">z</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>The idea is that <span class="monospaced">f</span> is the post composition (using <span class="monospaced">Fold.post</span>) of
the actual code for the function with a functional-record updater that
starts with the defaults.</p></div>
<div class="paragraph"><p>Here are some example calls to <span class="monospaced">f</span>.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">val</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="k">val</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">a</span><span class="w"> </span><span class="mi">13</span><span class="p">)</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="k">val</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">a</span><span class="w"> </span><span class="mi">13</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">b</span><span class="w"> </span><span class="mf">17.5</span><span class="p">)</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="k">val</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">b</span><span class="w"> </span><span class="mf">17.5</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">a</span><span class="w"> </span><span class="mi">13</span><span class="p">)</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>Notice that a caller can supply neither of the arguments, either of
the arguments, or both of the arguments, and in either order. All
that matter is that the arguments be labelled correctly (and of the
right type, of course).</p></div>
<div class="paragraph"><p>Here is another example.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">val</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="n">Fold</span><span class="p">.</span><span class="n">post</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="n">updateBCD</span><span class="w"> </span><span class="p">{</span><span class="n">b</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">"<>"</span><span class="p">},</span><span class="w"></span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="p">{</span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="n">d</span><span class="p">}</span><span class="w"> </span><span class="p">=></span><span class="w"></span>
<span class="w"> </span><span class="n">print</span><span class="w"> </span><span class="p">(</span><span class="n">concat</span><span class="w"> </span><span class="p">[</span><span class="n">Int</span><span class="p">.</span><span class="n">toString</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="s">" "</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">Real</span><span class="p">.</span><span class="n">toString</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="s">" "</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">d</span><span class="p">,</span><span class="w"> </span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">]))</span><span class="w"></span>
<span class="w"> </span><span class="n">z</span><span class="w"></span>
</pre></div></div></div>
<div class="paragraph"><p>Here are some example calls.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="k">val</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="k">val</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">d</span><span class="w"> </span><span class="s">"goodbye"</span><span class="p">)</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
<span class="k">val</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">d</span><span class="w"> </span><span class="s">"hello"</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">b</span><span class="w"> </span><span class="mi">17</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">U</span><span class="p">#</span><span class="n">c</span><span class="w"> </span><span class="mf">19.3</span><span class="p">)</span><span class="w"> </span><span class="n">$</span><span class="w"></span>
</pre></div></div></div>
</div>
</div>
</div>
<div id="footnotes"><hr></div>
<div id="footer">
<div id="footer-text">
</div>
<div id="footer-badges">
</div>
</div>
</body>
</html>
|