<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On May 25, 2016, at 9:04 PM,&nbsp;Tony Allevato&nbsp;wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Georgia; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">I was inspired to put together a draft proposal based on an older<br>discussion in the Universal Equality, Hashability, and Comparability thread</span></blockquote><br></div><div>Thank you for driving this forward.</div><div>Equatability through conditional conformance has been discussed a lot, but in the end we didn't get very far.&nbsp;</div><div><br></div><div>As for implicit or explicit adoption of the default equatability I am undecided. If you have to opt in explicitly you will no longer get a compiler warning if you forget to write your custom implementation (if that is what you intended).</div><div><br></div><div>As for omitting properties from equating or hashing, &nbsp;I find this very important. I didn't count my equatable structs, but I think many would need a custom implementation, especially the more complex types.</div><div>I definitely want the option to include computed properties in the equality test. A common scenario would be: omit two stored properties, include one computed property instead.</div><div><br></div><div>It has also been suggested that property behaviors may be used for this.</div><div>I never followed the discussion on these, but here is a test balloon: let a property (stored or computed) return an optional Bool when compared to the same property of another instance. nil = don't care. The property can decide whether to use simple equality (if defined) or some struct type-specific equality. More flexible and saves two keywords.</div><div>I don't know if and when property behaviors are going to happen. Switching from attributes to property behaviors would be a thoroughly breaking change of course.</div><div><br></div><div>Jan E.</div><br></body></html>