<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">The section you are referencing is regarding ‘assignment’; however, in the example below we aren’t talking about assignment, this is 'constant-declaration', which is different than a ‘parenthesized expression’.</div>
<div class=""><br class="">
</div>
<div class="">But overall I get it, and I think I’m trending toward the same conclusion you reached re: checking the full type of the identifier -vs- comparing the types of the constituent elements - interesting stuff!</div>
<div class=""><br class="">
</div>
<div class="">Shane</div>
<div class=""><br class="">
</div>
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Jul 6, 2016, at 7:34 AM, Neil Faiman &lt;<a href="mailto:neil.swift@faiman.org" class="">neil.swift@faiman.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">The language reference says that “Assignment is performed from each part of the&nbsp;<i class="">value</i>&nbsp;to the corresponding part of the&nbsp;<i class="">expression</i>. A&nbsp;<b class="">String</b>&nbsp;value can be assigned to a&nbsp;<b class="">String</b>, and
 a&nbsp;<b class="">() -&gt; Int</b>&nbsp;value can be assigned to a&nbsp;<b class="">() throws -&gt; Int</b>, so one would reasonably expect that both tuple assignments would work.&nbsp;</div>
<div class=""><br class="">
</div>
<div class="">My hunch would be that the compiler has two different code paths for an assignment whose RHS is an&nbsp;<i class="">identifier</i>&nbsp;and an assignment whose RHS is a&nbsp;&nbsp;<i class="">parenthesized-expression</i>; that in the first case starts about by asking
 whether the RHS type is the same or a subtype of the LHS type, and reporting an error when it isn’t, but that in the second case, it starts with an element-by-element type comparison, which succeeds.</div>
<div class=""><br class="">
</div>
<div class="">Regards,</div>
<div class=""><br class="">
</div>
<div class=""><span class="Apple-tab-span" style="white-space: pre;"></span>Neil</div>
<div class=""><br class="">
</div>
<div class="">
<blockquote type="cite" class="">
<div class="">On Jul 6, 2016, at 9:55 AM, Shane S via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
Aaron this works for me in both Swift 2.2 and Swift 3 provided that you remove the ‘throws’ keyword.
<div class=""><br class="">
</div>
<div class="">What seems odd to me is not the first assignment, but rather the second that _allows_ the use of ‘throws’ when t.1 (i.e. f) does not throw - is your concern the same?</div>
<div class=""><br class="">
</div>
<div class="">Shane</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">
<div class="">
<blockquote type="cite" class="">
<div class="">On Jul 5, 2016, at 10:48 PM, Aaron Bohannon via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">
<div class="">Yesterday, it was pointed out that a variable name referring to a tuple cannot be used as a pattern.&nbsp; I have noticed another sort of inconsistency in how tuples are treated when they are referenced by name:</div>
<div class=""><br class="">
</div>
<div class="">
<div class=""><font face="monospace, monospace" class="">func f() -&gt; Int { return 5 }</font></div>
<div class=""><font face="monospace, monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace, monospace" class="">let t = (&quot;a&quot;, f)</font></div>
<div class=""><font face="monospace, monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace, monospace" class="">let _: (String, () throws -&gt; Int) = t &nbsp;// type error</font></div>
<div class=""><font face="monospace, monospace" class="">let _: (String, () throws -&gt; Int) = (t.0, t.1) &nbsp;// OK</font></div>
</div>
<div class=""><br class="">
</div>
<div class="">This situation leads to a different sort of type error; however, the error seems equally unwarranted.&nbsp; I can't see any good reason for a well-typed program to become ill-typed when `(t.0, t.1)` is replaced with `t` (assuming `t` is a pair).</div>
<div class=""><br class="">
</div>
<div class="">Should I file a separate bug for the specific example above?</div>
<div class=""><br class="">
</div>
<div class="">- Aaron</div>
</div>
_______________________________________________<br class="">
swift-users mailing list<br class="">
<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-users" class="">https://lists.swift.org/mailman/listinfo/swift-users</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
_______________________________________________<br class="">
swift-users mailing list<br class="">
<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-users" class="">https://lists.swift.org/mailman/listinfo/swift-users</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</body>
</html>