<div dir="ltr"><div>I was notified that my SR-2216 and SR-296 had been &quot;fixed as part of implementing SE-0110&quot;.<br></div><div><br></div><div>But AFAICT SE-0110 can&#39;t possibly be fully implemented in dev snapshot 2017-06-02, even though the status of SE-0110 is &quot;Implemented (Swift 4)&quot;.</div><div><br></div><div><br></div><div>The title of SE-0110 is</div><div>&quot;Distinguish between single-tuple and multiple-argument function types&quot;</div><div><br></div><div>Keep that in mind while observing the following demonstration of the (Swift 4) behavior of Developer Snapshot 2017-06-02 (a):</div><div><br></div><div>func f(_ a: Int, _ b: Int) { print(&quot;\(a), \(b)&quot;) }</div><div>func g(_ tuple: (Int, Int)) { print(&quot;\(tuple)&quot;) }</div><div>f(1, 2) // 1, 2</div><div>g((1, 2)) // (1, 2)</div><div>// Working as expected.</div><div><br></div><div>// But:</div><div>print(type(of: f) == type(of: g)) // true</div><div>// IMHO this is not how to properly</div><div>// &quot;Distinguish between single-tuple and multiple-argument function types&quot;</div><div><br></div><div>// And as if that wasn&#39;t enough (pay close attention):</div><div>var (fCopy, gCopy) = (f, g)</div><div>fCopy(1, 2) // 1, 2</div><div>gCopy((1, 2)) // (1, 2)</div><div>swap(&amp;fCopy, &amp;gCopy)</div><div>fCopy(1, 2) // (1, 2)</div><div>gCopy((1, 2)) // 1, 2</div><div>// Crazy!</div><div><br></div><div>I&#39;m trying to put this behavior and the following pieces together:</div><div><br></div><div>1. The introdoction from SE-0110:</div><div>&quot;Swift&#39;s type system should properly distinguish between functions that take one tuple argument, and functions that take multiple arguments.&quot;</div><div><br></div><div>2. The status of SE-0110:</div><div>Implemented (Swift 4)</div><div><br></div><div>3. The &quot;fixed as part of implementing SE-0110&quot; notification of my bug reports </div><div>SR-2216: Confusing behavior related to closure types and tuples</div><div>SR-296: Fix inconsistencies related to tuples, arg/param lists, type params, typealiases</div><div><br></div><div><br></div><div>Perhaps SE-0110 is just not fully implemented in dev snapshot 2017-06-02, but it is implemented somewhere, why else should it get the status &quot;implemented&quot;?</div><div><br></div><div>But then I read the following by Vladimir S (one of the SE-0110 authors?): </div><div><a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170529/036965.html">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170529/036965.html</a></div><div><br></div><div>It&#39;s a very interesting read, and it&#39;s nice to see these old inconsistencies are getting some attention (they deserve all the attention they can get), but I&#39;m still confused.</div><div><br></div><div>Is it possible to implement SE-0110 without sorting out the above demonstrated inconsistencies?</div><div><br></div><div>Should status of SE-0110 really be &quot;Implemented&quot;?</div><div><br></div><div>/Jens</div><div><br></div></div>