<div dir="ltr">I apologize upfront for necromancing this thread. Is there any momentum on this proposal?<div><br></div><div>My team was discussing the merits of default (opt-in) Equality. As soon as the equality function has been written then the compiler is satisfied, but there is no way to get compile time correctness for the equality. Unit tests can only go so far with ensuring the equality function is robust. Once a new property is added to a struct, for instance, the equality function is no longer correct and without warning. Currently there is no way to safeguard this situation. This would be a welcome addition to Swift.</div><div><br></div><div>Mark</div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 11, 2016 at 11:19 AM, Jose Cheyo Jimenez 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 style="word-wrap:break-word"><span>
&gt; (starting a new thread by DaveA&#39;s request)<br>&gt; <br>&gt; There&#39;s a definition of equality that makes sense as a default for nearly every type in our system:<br>&gt; <br>&gt; - Basic types like IntNN, FloatNN, String, etc. have domain-defined equality,<br>&gt; - Structs and tuples can be considered equal if their corresponding fields are equal,<br>&gt; - Enums can be considered equal if they carry the same, equal payload,<br><div><br></div></span><div>+1 for Equality, Comparable and Hashable especially for enums and tuples. </div><div><br></div><div>I know that equality was added for tuples but I think that enums are perfect for adding automatic generation of conformance to Equality, Comparable and Hashable. </div><div><br></div><div>Take a look at this toy example of an Enum with 9 cases</div><div><br></div><div>boiler plate to conform to Equatable</div><div><a href="https://github.com/exercism/xswift/blob/master/exercises/poker/PokerExample.swift#L151-L189" target="_blank">https://github.com/exercism/xswift/blob/master/exercises/poker/PokerExample.swift#L151-L189</a></div><div><br></div><div>boiler plate to conform to Comparable</div><div><a href="https://github.com/exercism/xswift/blob/master/exercises/poker/PokerExample.swift#L191-L245" target="_blank">https://github.com/exercism/xswift/blob/master/exercises/poker/PokerExample.swift#L191-L245</a></div><span><div><br></div><div><br></div><div>&gt; It&#39;s my feeling that Equatable and Hashable would make a lot of sense as universal operations; I&#39;m not so sure about Comparable.<br>&gt; <br>&gt; -Joe</div><div><br></div></span><div><div>For enums a defaultComparable protocol could just rank on the order the fields are declared:</div></div><div><a href="https://github.com/exercism/xswift/blob/master/exercises/poker/PokerExample.swift#L211-L212" target="_blank">https://github.com/exercism/xswift/blob/master/exercises/poker/PokerExample.swift#L211-L212</a></div><div><br></div><div><br></div></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>