<div dir="ltr"><div>I like the idea.</div><div><br></div><div>I think I&#39;d be using typealias a lot to make things more concise, but that&#39;s not necessarily a problem. </div><div><br></div><div>How would I name the following parameter?</div><div><br></div><div><font face="monospace, monospace">    struct OrderedCollection&lt;T: Comparable&gt; {</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">As I understand it, would I do it as follows?</font></div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace">    struct OrderedCollection&lt;Element: T: Comparable&gt; {</font></div><div><font face="monospace, monospace">    }</font></div></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">Or would all type constraints now require `where`, like this:</font></div><div><div><div><font face="monospace, monospace">    struct OrderedCollection&lt;Element: T where T: Comparable&gt; {</font></div><div><font face="monospace, monospace">    }</font></div></div></div><div><br></div><div>Also, a typealias seems somewhat redundant when the parameter is labelled:</div><div><br></div><div><div><font face="monospace, monospace">    struct OrderedCollection&lt;Element: T where T: Comparable&gt; {</font></div><div><font face="monospace, monospace">        typealias Element = T</font></div><div><font face="monospace, monospace">    }</font></div></div><div><br></div><div>I wonder if the typealias could be implied.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 24, 2016 at 9:52 AM, Dave Abrahams 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"><span class=""><br>
on Sat Jan 23 2016, David Sweeris &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
<br>
&gt; The title seems fairly self-explanatory. Does anyone else think this could be useful?<br>
&gt; struct True : BooleanType {…} // Just part of the example… not in the proposal (although I do like it)<br>
&gt; struct False : BooleanType {…}  // Same<br>
&gt; // This is where the actual idea starts<br>
&gt; struct BigInt &lt;BaseType: T = Int, CanEqualZero: U = Yes where T: IntegerArithmeticType, U: BooleanType&gt; {…}<br>
&gt;<br>
&gt; The first parameter label could be skipped (or not), depending on<br>
&gt; whatever the rules for functions parameter labels ends up being<br>
&gt; (either way, they should be the same IMHO). Then variables could be<br>
&gt; declared like this:<br>
&gt; let foo =   BigInt()      // BigInt&lt;Int, No&gt;()<br>
&gt; let bar =   BigInt&lt;Int32&gt;() // For when your data will be processed on a 32-bit platform or something<br>
&gt; let divisor = BigInt&lt;CanEqualZero: False&gt;()<br>
&gt;<br>
&gt; (The obvious follow-up suggestion is to then allow a generic type’s<br>
&gt; definition to change based on the results of logical operations<br>
&gt; performed purely on the types that are passed in, but I think that’s<br>
&gt; getting into “macro system” territory, and should probably be its own<br>
&gt; thing.)<br>
&gt;<br>
&gt; Anyway, thoughts?<br>
&gt;<br>
<br>
</span>+1<br>
<span class="HOEnZb"><font color="#888888">--<br>
-Dave<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">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>
</font></span></blockquote></div><br></div>