<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="">Joe,</div><div class=""><br class=""></div><div class=""><div class="">Just from your experience on this topic, is there any reason not to also move the primary constraints into the trailing `where` clause?</div><div class=""><br class=""></div><div class="">So instead of what you wrote, we'd have it this way:</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""></blockquote><span style="font-family: Menlo-Regular; font-size: 11px;" class="">&nbsp; &nbsp; func foo&lt;T, U&gt;(x: T, y: U) -&gt; Result&lt;T,U&gt;</span><br class=""><blockquote type="cite" class=""></blockquote><span style="font-family: Menlo-Regular; font-size: 11px;" class="">&nbsp; &nbsp; &nbsp; &nbsp;where&nbsp;</span><span style="font-family: Menlo-Regular; font-size: 11px;" class=""><b class="">T: Foo, U: Bar</b>,&nbsp;</span><span style="font-family: Menlo-Regular; font-size: 11px;" class="">T.Foo == U.Bar /*, etc. */</span></div><div class=""><blockquote type="cite" class=""></blockquote><span style="font-family: Menlo-Regular; font-size: 11px;" class="">&nbsp; &nbsp; {</span><br class=""><span class="" style="font-family: Menlo-Regular; font-size: 11px; float: none; display: inline !important;">&nbsp; &nbsp; }</span><br class="" style="font-family: Menlo-Regular; font-size: 11px;"></div><div class=""><br class=""></div><div class="">…as well as:</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""></blockquote><span style="font-family: Menlo-Regular; font-size: 11px;" class="">&nbsp; &nbsp; struct Foo&lt;T, U&gt;</span><br class=""><blockquote type="cite" class=""></blockquote><span style="font-family: Menlo-Regular; font-size: 11px;" class="">&nbsp; &nbsp; &nbsp; &nbsp;where&nbsp;</span><span style="font-family: Menlo-Regular; font-size: 11px;" class=""><b class="">T: Foo, U: Bar</b>,&nbsp;</span><span style="font-family: Menlo-Regular; font-size: 11px;" class="">T.Foo == U.Bar</span></div><div class=""><blockquote type="cite" class=""></blockquote><span style="font-family: Menlo-Regular; font-size: 11px;" class="">&nbsp; &nbsp; {</span><br class=""><span class="" style="font-family: Menlo-Regular; font-size: 11px; float: none; display: inline !important;">&nbsp; &nbsp; }</span></div><div class=""><br class=""></div><div class="">Like I said earlier in this thread, I think this would also make the `<font face="Menlo" style="font-size: 11px;" class="">extension</font>` syntax more uniform with types (by turning generic parameters into strictly locally visible things):</div><div class=""><br class=""></div><div class=""><div class=""><span style="font-size: 11px;" class=""><font face="Menlo" class="">&nbsp; &nbsp; extension Foo&lt;T, U&gt; where U == Baz {&nbsp;</font></span><span style="font-family: Menlo; font-size: 11px;" class="">// (Could've used X and Y here as well.)</span></div><div class=""><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp; &nbsp; &nbsp; &nbsp; // Now it's clear where the names T and U come from.</span></div><div class=""><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp; &nbsp; &nbsp; &nbsp; var bazzes: [U] { return ... }</span></div><div class=""><span class="" style="float: none; font-size: 11px; display: inline !important;"><font face="Menlo" class="">&nbsp; &nbsp; }</font></span></div></div><div class=""><br class=""></div><div class="">— Pyry</div></div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class=""><span style="font-family: Menlo-Regular; font-size: 11px;" class="">I think this is a good idea, though I would put the `where` clause after the function signature:</span></div><div class=""><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">func foo&lt;T: Foo, U: Bar&gt;(x: T, y: U) -&gt; Result&lt;T,U&gt;</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">&nbsp;&nbsp;&nbsp;where T.Foo == U.Bar /*, etc. */</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">{</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">}</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">As others noted, it's also appealing to do this for type declarations too:</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">struct Foo&lt;T: Foo, U: Bar&gt;</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">&nbsp;&nbsp;&nbsp;where T.Foo == U.Bar</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">{</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">}</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">and that gives a consistent feeling with extensions and protocol declarations.</span><br style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote></div><div class=""><br class=""></div></body></html>