<div dir="ltr"><a href="https://github.com/thoughtbot/Argo">https://github.com/thoughtbot/Argo</a><br><div><br></div><div>This is the example from their github page</div><div><br></div><div><pre style="overflow:auto;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:13.6px;margin-top:0px;margin-bottom:0px;font-stretch:normal;line-height:1.45;padding:16px;border-radius:3px;word-wrap:normal;color:rgb(51,51,51);background-color:rgb(247,247,247)"><span class="" style="color:rgb(167,29,93)">import</span> <span class="" style="color:rgb(0,134,179)">Argo</span>
<span class="" style="color:rgb(167,29,93)">import</span> <span class="" style="color:rgb(0,134,179)">Curry</span>

<span class="" style="color:rgb(167,29,93)">struct</span> User {
  <span class="" style="color:rgb(167,29,93)">let</span> id: <span class="" style="color:rgb(0,134,179)">Int</span>
  <span class="" style="color:rgb(167,29,93)">let</span> name: <span class="" style="color:rgb(0,134,179)">String</span>
  <span class="" style="color:rgb(167,29,93)">let</span> email: <span class="" style="color:rgb(0,134,179)">String</span>?
  <span class="" style="color:rgb(167,29,93)">let</span> role: Role
  <span class="" style="color:rgb(167,29,93)">let</span> companyName: <span class="" style="color:rgb(0,134,179)">String</span>
  <span class="" style="color:rgb(167,29,93)">let</span> friends: [User]
}

<span class="" style="color:rgb(167,29,93)">extension</span> User: Decodable {
  <span class="" style="color:rgb(167,29,93)">static</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">decode</span>(j: JSON) <span class="" style="color:rgb(167,29,93)">-&gt;</span> Decoded&lt;User&gt; {
    <span class="" style="color:rgb(167,29,93)">return</span> curry(User<span class="" style="color:rgb(167,29,93)">.</span><span class="" style="color:rgb(167,29,93)">init</span>)
      <span class="" style="color:rgb(167,29,93)">&lt;^&gt;</span> j <span class="" style="color:rgb(167,29,93)">&lt;|</span> <span class="" style="color:rgb(24,54,145)"><span class="">&quot;</span>id<span class="">&quot;</span></span>
      <span class="" style="color:rgb(167,29,93)">&lt;*&gt;</span> j <span class="" style="color:rgb(167,29,93)">&lt;|</span> <span class="" style="color:rgb(24,54,145)"><span class="">&quot;</span>name<span class="">&quot;</span></span>
      <span class="" style="color:rgb(167,29,93)">&lt;*&gt;</span> j <span class="" style="color:rgb(167,29,93)">&lt;|</span>? <span class="" style="color:rgb(24,54,145)"><span class="">&quot;</span>email<span class="">&quot;</span></span> <span class="" style="color:rgb(150,152,150)">// Use ? for parsing optional values</span>
      <span class="" style="color:rgb(167,29,93)">&lt;*&gt;</span> j <span class="" style="color:rgb(167,29,93)">&lt;|</span> <span class="" style="color:rgb(24,54,145)"><span class="">&quot;</span>role<span class="">&quot;</span></span> <span class="" style="color:rgb(150,152,150)">// Custom types that also conform to Decodable just work</span>
      <span class="" style="color:rgb(167,29,93)">&lt;*&gt;</span> j <span class="" style="color:rgb(167,29,93)">&lt;|</span> [<span class="" style="color:rgb(24,54,145)"><span class="">&quot;</span>company<span class="">&quot;</span></span>, <span class="" style="color:rgb(24,54,145)"><span class="">&quot;</span>name<span class="">&quot;</span></span>] <span class="" style="color:rgb(150,152,150)">// Parse nested objects</span>
      <span class="" style="color:rgb(167,29,93)">&lt;*&gt;</span> j <span class="" style="color:rgb(167,29,93)">&lt;||</span> <span class="" style="color:rgb(24,54,145)"><span class="">&quot;</span>friends<span class="">&quot;</span></span> <span class="" style="color:rgb(150,152,150)">// parse arrays of objects</span>
  }
}

<span class="" style="color:rgb(150,152,150)">// Wherever you receive JSON data:</span>

<span class="" style="color:rgb(167,29,93)">let</span> json: <span class="" style="color:rgb(0,134,179)">AnyObject</span>? <span class="" style="color:rgb(167,29,93)">=</span> <span class="" style="color:rgb(167,29,93)">try</span>? NSJSONSerialization<span class="" style="color:rgb(167,29,93)">.</span>JSONObjectWithData(data, options: [])

<span class="" style="color:rgb(167,29,93)">if</span> <span class="" style="color:rgb(167,29,93)">let</span> j: <span class="" style="color:rgb(0,134,179)">AnyObject</span> <span class="" style="color:rgb(167,29,93)">=</span> json {
  <span class="" style="color:rgb(167,29,93)">let</span> user: User? <span class="" style="color:rgb(167,29,93)">=</span> decode(j)
}</pre><pre style="overflow:auto;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:13.6px;margin-top:0px;margin-bottom:0px;font-stretch:normal;line-height:1.45;padding:16px;border-radius:3px;word-wrap:normal;color:rgb(51,51,51);background-color:rgb(247,247,247)">On second reading it seems to use currying</pre><pre style="overflow:auto;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:13.6px;margin-top:0px;margin-bottom:0px;font-stretch:normal;line-height:1.45;padding:16px;border-radius:3px;word-wrap:normal;color:rgb(51,51,51);background-color:rgb(247,247,247)"><br></pre><pre style="overflow:auto;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:13.6px;margin-top:0px;margin-bottom:0px;font-stretch:normal;line-height:1.45;padding:16px;border-radius:3px;word-wrap:normal;color:rgb(51,51,51);background-color:rgb(247,247,247)"><table class="" style="border-collapse:collapse;border-spacing:0px;font-family:Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:13px;line-height:18.2px;white-space:normal;background-color:rgb(255,255,255)"><tbody><tr><td id="LC1" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B&gt;(function: (A) <span class="" style="color:rgb(167,29,93)">-&gt;</span> B) -&gt; A -&gt; B {</td></tr><tr><td id="L2" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC2" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`) }</td></tr><tr><td id="L3" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC3" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L4" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC4" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L5" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC5" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C&gt;(function: (A, B) <span class="" style="color:rgb(167,29,93)">-&gt;</span> C) -&gt; A -&gt; B -&gt; C {</td></tr><tr><td id="L6" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC6" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`) } }</td></tr><tr><td id="L7" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC7" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L8" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC8" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L9" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC9" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D&gt;(function: (A, B, C) <span class="" style="color:rgb(167,29,93)">-&gt;</span> D) -&gt; A -&gt; B -&gt; C -&gt; D {</td></tr><tr><td id="L10" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC10" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`) } } }</td></tr><tr><td id="L11" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC11" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L12" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC12" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L13" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC13" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E&gt;(function: (A, B, C, D) <span class="" style="color:rgb(167,29,93)">-&gt;</span> E) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E {</td></tr><tr><td id="L14" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC14" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`) } } } }</td></tr><tr><td id="L15" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC15" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L16" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC16" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L17" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC17" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F&gt;(function: (A, B, C, D, E) <span class="" style="color:rgb(167,29,93)">-&gt;</span> F) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F {</td></tr><tr><td id="L18" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC18" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`) } } } } }</td></tr><tr><td id="L19" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC19" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L20" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC20" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L21" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC21" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G&gt;(function: (A, B, C, D, E, F) <span class="" style="color:rgb(167,29,93)">-&gt;</span> G) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G {</td></tr><tr><td id="L22" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC22" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`) } } } } } }</td></tr><tr><td id="L23" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC23" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L24" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC24" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L25" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC25" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H&gt;(function: (A, B, C, D, E, F, G) <span class="" style="color:rgb(167,29,93)">-&gt;</span> H) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H {</td></tr><tr><td id="L26" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC26" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`) } } } } } } }</td></tr><tr><td id="L27" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC27" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L28" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC28" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L29" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC29" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I&gt;(function: (A, B, C, D, E, F, G, H) <span class="" style="color:rgb(167,29,93)">-&gt;</span> I) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I {</td></tr><tr><td id="L30" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC30" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`) } } } } } } } }</td></tr><tr><td id="L31" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC31" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L32" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC32" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L33" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC33" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J&gt;(function: (A, B, C, D, E, F, G, H, I) <span class="" style="color:rgb(167,29,93)">-&gt;</span> J) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J {</td></tr><tr><td id="L34" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC34" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`) } } } } } } } } }</td></tr><tr><td id="L35" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC35" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L36" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC36" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L37" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC37" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K&gt;(function: (A, B, C, D, E, F, G, H, I, J) <span class="" style="color:rgb(167,29,93)">-&gt;</span> K) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K {</td></tr><tr><td id="L38" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC38" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`) } } } } } } } } } }</td></tr><tr><td id="L39" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC39" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L40" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC40" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L41" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC41" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L&gt;(function: (A, B, C, D, E, F, G, H, I, J, K) <span class="" style="color:rgb(167,29,93)">-&gt;</span> L) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L {</td></tr><tr><td id="L42" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC42" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`) } } } } } } } } } } }</td></tr><tr><td id="L43" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC43" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L44" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC44" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L45" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC45" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L, M&gt;(function: (A, B, C, D, E, F, G, H, I, J, K, L) <span class="" style="color:rgb(167,29,93)">-&gt;</span> M) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L -&gt; M {</td></tr><tr><td id="L46" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC46" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> { `l` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`) } } } } } } } } } } } }</td></tr><tr><td id="L47" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC47" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L48" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC48" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L49" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC49" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L, M, N&gt;(function: (A, B, C, D, E, F, G, H, I, J, K, L, M) <span class="" style="color:rgb(167,29,93)">-&gt;</span> N) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L -&gt; M -&gt; N {</td></tr><tr><td id="L50" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC50" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> { `l` <span class="" style="color:rgb(167,29,93)">in</span> { `m` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`) } } } } } } } } } } } } }</td></tr><tr><td id="L51" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC51" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L52" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC52" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L53" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC53" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L, M, N, O&gt;(function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N) <span class="" style="color:rgb(167,29,93)">-&gt;</span> O) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L -&gt; M -&gt; N -&gt; O {</td></tr><tr><td id="L54" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC54" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> { `l` <span class="" style="color:rgb(167,29,93)">in</span> { `m` <span class="" style="color:rgb(167,29,93)">in</span> { `n` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`) } } } } } } } } } } } } } }</td></tr><tr><td id="L55" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC55" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L56" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC56" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L57" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC57" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P&gt;(function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) <span class="" style="color:rgb(167,29,93)">-&gt;</span> P) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L -&gt; M -&gt; N -&gt; O -&gt; P {</td></tr><tr><td id="L58" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC58" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> { `l` <span class="" style="color:rgb(167,29,93)">in</span> { `m` <span class="" style="color:rgb(167,29,93)">in</span> { `n` <span class="" style="color:rgb(167,29,93)">in</span> { `o` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`) } } } } } } } } } } } } } } }</td></tr><tr><td id="L59" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC59" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L60" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC60" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L61" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC61" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q&gt;(function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) <span class="" style="color:rgb(167,29,93)">-&gt;</span> Q) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L -&gt; M -&gt; N -&gt; O -&gt; P -&gt; Q {</td></tr><tr><td id="L62" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC62" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> { `l` <span class="" style="color:rgb(167,29,93)">in</span> { `m` <span class="" style="color:rgb(167,29,93)">in</span> { `n` <span class="" style="color:rgb(167,29,93)">in</span> { `o` <span class="" style="color:rgb(167,29,93)">in</span> { `p` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`) } } } } } } } } } } } } } } } }</td></tr><tr><td id="L63" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC63" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L64" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC64" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L65" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC65" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R&gt;(function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) <span class="" style="color:rgb(167,29,93)">-&gt;</span> R) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L -&gt; M -&gt; N -&gt; O -&gt; P -&gt; Q -&gt; R {</td></tr><tr><td id="L66" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC66" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> { `l` <span class="" style="color:rgb(167,29,93)">in</span> { `m` <span class="" style="color:rgb(167,29,93)">in</span> { `n` <span class="" style="color:rgb(167,29,93)">in</span> { `o` <span class="" style="color:rgb(167,29,93)">in</span> { `p` <span class="" style="color:rgb(167,29,93)">in</span> { `q` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`) } } } } } } } } } } } } } } } } }</td></tr><tr><td id="L67" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC67" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr><tr><td id="L68" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC68" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">
</td></tr><tr><td id="L69" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC69" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"><span class="" style="color:rgb(167,29,93)">public</span> <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">curry</span>&lt;A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S&gt;(function: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) <span class="" style="color:rgb(167,29,93)">-&gt;</span> S) -&gt; A -&gt; B -&gt; C -&gt; D -&gt; E -&gt; F -&gt; G -&gt; H -&gt; I -&gt; J -&gt; K -&gt; L -&gt; M -&gt; N -&gt; O -&gt; P -&gt; Q -&gt; R -&gt; S {</td></tr><tr><td id="L70" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC70" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">return</span> { `a` <span class="" style="color:rgb(167,29,93)">in</span> { `b` <span class="" style="color:rgb(167,29,93)">in</span> { `c` <span class="" style="color:rgb(167,29,93)">in</span> { `d` <span class="" style="color:rgb(167,29,93)">in</span> { `e` <span class="" style="color:rgb(167,29,93)">in</span> { `f` <span class="" style="color:rgb(167,29,93)">in</span> { `g` <span class="" style="color:rgb(167,29,93)">in</span> { `h` <span class="" style="color:rgb(167,29,93)">in</span> { `i` <span class="" style="color:rgb(167,29,93)">in</span> { `j` <span class="" style="color:rgb(167,29,93)">in</span> { `k` <span class="" style="color:rgb(167,29,93)">in</span> { `l` <span class="" style="color:rgb(167,29,93)">in</span> { `m` <span class="" style="color:rgb(167,29,93)">in</span> { `n` <span class="" style="color:rgb(167,29,93)">in</span> { `o` <span class="" style="color:rgb(167,29,93)">in</span> { `p` <span class="" style="color:rgb(167,29,93)">in</span> { `q` <span class="" style="color:rgb(167,29,93)">in</span> { `r` <span class="" style="color:rgb(167,29,93)">in</span> function(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`) } } } } } } } } } } } } } } } } } }</td></tr><tr><td id="L71" class="" style="padding:0px 10px;width:50px;min-width:50px;white-space:nowrap;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.298039);vertical-align:top;text-align:right;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="LC71" class="" style="padding:0px 10px;vertical-align:top;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">}</td></tr></tbody></table></pre></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr">







<p><b><font color="#cc0000">___________________________________</font></b></p><p><b>James⎥Lead Engineer</b></p><p><b><font color="#cc0000"><a href="mailto:james@supmenow.com" target="_blank">james@supmenow.com</a>⎥<a href="http://supmenow.com" target="_blank">supmenow.com</a></font></b></p><p><b><font size="2">Sup</font></b></p><p><b><font size="2">Runway East
</font></b></p><p><b><font size="2">10 Finsbury Square</font></b></p><p><b><font size="2">London</font></b></p><p><b><font size="2">
EC2A 1AF </font></b></p></div></div></div></div></div>
<br><div class="gmail_quote">On Wed, Jan 27, 2016 at 6:15 PM, Chris Lattner <span dir="ltr">&lt;<a href="mailto:clattner@apple.com" target="_blank">clattner@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><span class=""><blockquote type="cite"><div>On Jan 26, 2016, at 11:41 PM, James Campbell via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div dir="auto"><div>I think libraries like argo use it.</div><div><br></div><div>In these cases it&#39;s for initlizing a struct with data (from Json).</div></div></div></blockquote><div><br></div></span><div>Ok, I’m definitely interested in knowing more.  Please include a code sample, showing both the declaration being splatted into and the call sites.  Otherwise, I can’t tell how much value this feature is adding, and what the pain would be if it were removed.  Thanks!</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>-Chris</div></font></span><div><div class="h5"><div><br></div><br><blockquote type="cite"><div><div dir="auto"><div><br></div><div>You could argue that these libraries could implement this better but I would like to put forward a few questions:</div><div><br></div><div>- if we kept this we could instead add an apply function to closures which could take a turple, vardaric array or maybe even allowed you to call it by specifying the names arguments (in any order you liked)</div><div><br></div><div>That way you could do:</div><div><br></div><div>Object.foo //returns a normal closure</div><div>Object.foo.apply(turple) //compiler generated sugar function</div><div><br></div><div>A lot of libraries including Lenses I think would be simplified by this as they would no longer rely on currying or turple splats as heavily. It also allows you to apply the value of something easily.</div><div><br></div><div>Or we could define a new syntax to call labelled arguments in any order </div><div><br></div><div>This would work well with immutable objects as in certain cases I wish to mutate a struc like so:</div><div><br></div><div>Struct Person</div><div>{</div><div>Let name: String</div><div><br></div><div>Init(name: String)</div><div>{</div><div><a href="http://self.name" target="_blank">self.name</a> = name)</div><div>}</div><div>}</div><div><br></div><div>Let person = Person(name:&quot;James&quot;)</div><div>person.mutate({</div><div>.name = &quot;Bob&quot;</div><div>}) // this special syntax says to the compiler to take this special object and to return a new copy of the original struct with the values changed.</div><div><br></div><div>Inside of the {} you can directly access the properties you wish to change.</div><div><br></div><div>I use the closure syntax but perhaps it could use another one .</div><div><br></div><div>This syntax could be used for apply so you can define the parameters you care about:  </div><div><br></div><div>dependency({</div><div>name:&quot;networking&quot;,</div><div>git:&quot;&quot;</div><div>})</div><div><br>Sent froml my iPhone</div><div><br>On 27 Jan 2016, at 06:38, Jacob Bandes-Storch via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">+1 from me as well. I don&#39;t think I&#39;ve ever used this feature on purpose.<div><br></div><div>I look forward to future discussions about splatting, especially as they relate to variadic functions.<br><div class="gmail_extra">
<br><div class="gmail_quote">On Tue, Jan 26, 2016 at 10:36 PM, T.J. Usiyan via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>+1</div><div><br></div>I like the feature quite a bit but avoid it as a result of the naming concerns. If removing this feature can help improve the type checker, the trade is worthwhile, IMO.</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Wed, Jan 27, 2016 at 1:23 AM, Chris Lattner via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div style="word-wrap:break-word"><div>For discussion: comments appreciated!</div><div><br></div><div><br></div><div><br></div><div><br></div><div><h1 style="font-size:2.25em;margin-right:0px;margin-bottom:16px;margin-left:0px;line-height:1.2;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238);color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;background-color:rgb(255,255,255);margin-top:0px!important">Remove implicit tuple splat behavior from function applications</h1><ul style="padding:0px 0px 0px 2em;margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)"><li>Proposal: <a href="https://github.com/apple/swift-evolution/blob/master/proposals/NNNN-name.md" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none" target="_blank">SE-</a>TBD</li><li>Author(s): Chris Lattner</li><li>Status: <strong>Awaiting review</strong></li><li>Review manager: TBD</li></ul><h2 style="margin-top:1em;margin-bottom:16px;line-height:1.225;font-size:1.75em;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238);color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;background-color:rgb(255,255,255)"><a href="https://github.com/apple/swift-evolution#introduction" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none;display:inline-block;padding-right:2px;line-height:1" target="_blank"><span style="font-weight:normal;font-size:16px;line-height:1;font-family:octicons;display:inline-block;vertical-align:middle"></span></a>Introduction</h2><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">Function calls (which include several syntactic forms that apply an argument list to something of function type) currently have a dual nature in Swift.  Given something like:</p><div><br></div><div><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>func foo(a : Int, b : Int) {}<br></font></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)"><br></p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">You can call it either with with the typical syntactic form that passes arguments to each of its parameters:</p><div><br></div><div><div><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>foo(42, b : 17)<br></font></div></div><div><br></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">or you can take advantage of a little-known feature to pass an entire argument list as a single value (of tuple type):</p><div><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>let x = (1, b: 2)<br><span style="white-space:pre-wrap">        </span>foo(x)<br></font></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)"><br></p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">This proposal recommends removing the later form, which I affectionately refer to as the “tuple splat” form.  This feature is purely a sugar feature, it does not provide any expressive ability beyond passing the parameters manually.</p><div><br></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">Swift-evolution thread: TBD</p><h2 style="margin-top:1em;margin-bottom:16px;line-height:1.225;font-size:1.75em;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238);color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;background-color:rgb(255,255,255)"><a href="https://github.com/apple/swift-evolution#motivation" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none;display:inline-block;padding-right:2px;line-height:1" target="_blank"><span style="font-weight:normal;font-size:16px;line-height:1;font-family:octicons;display:inline-block;vertical-align:middle"></span></a>Motivation</h2><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">This behavior is cute, precedented in other functional languages, and has some advantages, but it also has several major disadvantages, which are all related to its syntactic form.</p><div><font color="#323333" face="Helvetica Neue" size="3">* A call to foo(x) looks like a call to an overloaded version of foo, both to the compiler and to the human who maintains the code.  This is extremely confusing if you don’t know the feature exists.</font></div><div><font color="#323333" face="Helvetica Neue" size="3">* There are real ambiguities in the syntax, e.g. involving Any arguments and situations where you want to pass a tuple value as a single parameter.</font></div><div><font color="#323333" face="Helvetica Neue" size="3">* The current implementation has a ton of implementation bugs - it doesn’t work reliably.</font></div><div><font color="#323333" face="Helvetica Neue" size="3">* The current implementation adds complexity to the type checker, slowing it down and adding maintenance burden.</font></div><div><font color="#323333" face="Helvetica Neue" size="3">* The current implementation doesn’t work the way we would want a tuple splat operation to work.  For example, arguably, you should be able to call foo with:</font></div><div><font color="#323333" face="Helvetica Neue" size="3"><br></font></div><div><div><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>func bar() -&gt; (Int, Int) { … }<br><span style="white-space:pre-wrap">        </span>foo(bar())<br></font><br></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">… but this is not allowed, since tuple labels are required to line up.  You have to write:</p><div style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)"><br></div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"></div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"></div><div><br></div><div style="font-variant:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>func bar() -&gt; (Int, b: Int) </font><span style="color:rgb(50,51,51);font-family:Menlo;font-size:inherit"> { … }</span><font color="#323333" face="Menlo" size="3"><br><span style="white-space:pre-wrap">        </span>foo(bar())<br></font></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)"><br></p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">This makes this feature very difficult to use in practice, because you have to _’ize a lot of parameters (violating naming conventions), perform manual shuffling (defeating the sugar benefits of the feature), or add parameter labels to the result of functions (which leads to odd tying between callers and callees).</p></div><div><br></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">The root problem here is that we use exactly the same syntax for both forms of function application.  If the two forms were differentiated (an option considered in “alternatives considered” below) then some of these problems would be defined away.</p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">From a historical perspective, the tuple splat form of function application dates back to very early Swift design (probably introduced in 2010, but possibly 2011) where all function application was of a single value to a function type.  For a large number of reasons (including default arguments, variadic arguments, labels, etc) we have completely abandoned this model, but we never came back to reevaluating the tuple splat behavior.</p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">If we didn’t already have this feature, we would not add it to Swift 3 (at least in its current form).</p><h2 style="margin-top:1em;margin-bottom:16px;line-height:1.225;font-size:1.75em;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238);color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;background-color:rgb(255,255,255)"><a href="https://github.com/apple/swift-evolution#proposed-solution" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none;display:inline-block;padding-right:2px;line-height:1" target="_blank"><span style="font-weight:normal;font-size:16px;line-height:1;font-family:octicons;display:inline-block;vertical-align:middle"></span></a>Proposed solution</h2><p style="margin-top:0px;margin-bottom:16px;background-color:rgb(255,255,255)"><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3">The proposed solution is simple, we should just remove this feature from the Swift 3 compiler.  Ideally we would deprecate it in the Swift 2.2 compiler and remove it in Swift 3.  However, if there isn’t time to get the deprecation into Swift 2.2, the author believes it would be perfectly fine to just remove it in Swift 3 (with a fixit + migration help of course).</font></p><p style="margin-top:0px;margin-bottom:16px;background-color:rgb(255,255,255)"><span style="color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:inherit">One of the interesting aspect of this feature is that some of the people we’ve spoken to are very fond of it.  However, when pressed, they admit that they </span><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3">are not actually using it widely in their code, or if they are using it, they are abusing naming conventions (distorting their code) in order to use it.  This doesn’t seem like a positive contribution - this seems like a “clever” feature, not a practical one.</font></p><h2 style="margin-top:1em;margin-bottom:16px;line-height:1.225;font-size:1.75em;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238);color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;background-color:rgb(255,255,255)"><a href="https://github.com/apple/swift-evolution#detailed-design" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none;display:inline-block;padding-right:2px;line-height:1" target="_blank"><span style="font-weight:normal;font-size:16px;line-height:1;font-family:octicons;display:inline-block;vertical-align:middle"></span></a>Detailed design</h2><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">The design is straight-forward.  In the Swift 3 time frame, we continue to parse and type check these expressions as we have so far, but produce an error + fixit hint when it is the tuple splat form.  The migrator would auto-apply the fixit hint as it does for other cases.</p><h2 style="margin-top:1em;margin-bottom:16px;line-height:1.225;font-size:1.75em;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238);color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;background-color:rgb(255,255,255)"><a href="https://github.com/apple/swift-evolution#impact-on-existing-code" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none;display:inline-block;padding-right:2px;line-height:1" target="_blank"><span style="font-weight:normal;font-size:16px;line-height:1;font-family:octicons;display:inline-block;vertical-align:middle"></span></a>Impact on existing code</h2><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">Any code that uses this feature will have to move to the traditional form.  In the case of the example above, this means rewriting the code from:</p><div><div><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>foo(x)<br></font></div></div><div><br></div><div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)">into a form like this:</p><div></div></div><div><div><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>foo(x.0, x.b)<br></font></div></div><div><br></div><div><font color="#323333" face="Helvetica Neue" size="3">In the case where “x” is a complex expression, a temporary variable will need to be introduced.  We believe that compiler fixits can handle the simple cases directly and that this extension is not widely used.</font></div><div><br></div><h2 style="margin-top:1em;margin-bottom:16px;line-height:1.225;font-size:1.75em;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238);color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;background-color:rgb(255,255,255)"><a href="https://github.com/apple/swift-evolution#alternatives-considered" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none;display:inline-block;padding-right:2px;line-height:1" target="_blank"><span style="font-weight:normal;font-size:16px;line-height:1;font-family:octicons;display:inline-block;vertical-align:middle"></span></a>Alternatives considered</h2><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">The major problem with this feature is that it was not well considered and implemented properly (owing to its very old age, it has just been kept limping along).  The alternative then is to actually design a proper feature to support this.  Since the implicitness and syntactic ambiguity with normal function application is the problem, the solution is to introduce an explicit syntactic form to represent this.  For example, something like this could address the problems we have:</div></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;margin-bottom:0px!important"><font color="#323333" face="Menlo" size="3"><span style="white-space:pre-wrap">        </span>foo(*x)    // NOT a serious syntax proposal<br></font></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">However, actually designing this feature would be a non-trivial effort not core to the Swift 3 mission:</div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">* It is a pure-sugar feature, and therefore low priority.</div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">* We don’t have an obvious sigil to use.  “prefix-star” should be kept as unused for now in case we want to use it to refer to memory-related operations in the future.</div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">* Making the tuple splat operation great requires more than just fixing the syntactic ambiguities we have, it would require re-evaluating the semantics of the operation (e.g. in light of parameter labels, varargs and other features).</div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">If there is serious interest in pursuing this as a concept, we should do it as a follow-on proposal to this one.  If a good design emerges, we can evaluate that design based on its merits.</div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">The final alternative is that we could leave the feature in the compiler.  However, that means living with its complexity “forever” or breaking code in the Swift 4 timeframe.  It would be preferable to tackle this breakage in the Swift 3 timeframe, since we know that migration will already be needed then.</div><span><font color="#888888"><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important">-Chris</div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div><div style="margin-top:0px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px!important"><br></div></font></span></div><br></div></div>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div>
<br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div></div></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></div>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></blockquote></div></div></div><br></div></blockquote></div><br></div>