<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="">I took Joe's points about making it easier to work with heterogeneous collections to refer to heterogeneous comparison.<div class=""><br class=""></div><div class="">I'm still -1 to "func ==<T>(lhs: T, rhs: T) -> Bool", but for the reasons Brent brought up earlier. If adding a default conformance can be made "as easy as" declaring conformance to "Equatable" without an explicit impl (or declaring conformance to "Regular" or "#derives(Equatable)" or ...), I see that as the preferable option:</div><div class=""><br class=""></div><div class="">- The amount of inconvenience it gives the programmer is negligible - one conformance declaration for each custom type that deserves to be equatable, and no function or operator code.</div><div class="">- Declaring it explicitly is a flag that the programmer has intentionally decided that this type should be equatable under whatever common-sense default rules the compiler uses for the type's 'kind'. This is especially important for APIs being vended out, whose implementations might be opaque to the user.</div><div class="">- Declaring a universal homogenous equality operator that works for types for which equality makes no sense (or there's no clear definition) is actively hostile to users of the language (to go back to Brent's point, "why is my Set<() -> Int> broken when I try using it?")</div><div class=""><br class=""></div><div class="">Austin</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 10, 2016, at 10:21 PM, William Dillon <<a href="mailto:william@housedillon.com" class="">william@housedillon.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Mar 10, 2016, at 9:58 PM, Thorsten Seitz via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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 class="Apple-interchange-newline">Am 09.03.2016 um 22:34 schrieb Austin Zheng via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>>:<br class=""><br class=""></div><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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 class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">I think we might (at least partially) be in violent agreement :). Most (if not everyone) on this thread has agreed that painless opt-in auto-conformance is a good thing ("struct Foo : Regular { .. }"), albeit with differing definitions of 'painless'. But I maintain that having a "func ==(lhs: Any, rhs: Any) -> Bool" stdlib fallback implementation of == is a lot of potential pain for very little benefit.</div></div></div></div></blockquote><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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 class=""></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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="">I agree completely. Not having everything comparable with everything is a good thing IMO!</span><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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 class=""></div></div></blockquote><br class=""></div><div class="">I can’t tell if I misunderstood Joe's original proposal, but I don’t think the suggestion was to have everything comparable to everything, but to have any type comparable with itself by default. I’m against everything being comparable with everything else, but for having a default equality for every type with itself.</div><div class=""><br class=""></div><div class="">To re-state:</div><div class=""><br class=""></div><div class="">-1 to: <span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(4, 51, 255);" class="">func</span><span style="font-family: 'Fira Code'; font-size: 11px;" class=""> ==(lhs: </span><span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(52, 149, 175);" class="">Any</span><span style="font-family: 'Fira Code'; font-size: 11px;" class="">, rhs: </span><span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(52, 149, 175);" class="">Any</span><span style="font-family: 'Fira Code'; font-size: 11px;" class="">) -> </span><span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(52, 149, 175);" class="">Bool</span></div><div class="">+1 to: <span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(4, 51, 255);" class="">func</span><span style="font-family: 'Fira Code'; font-size: 11px;" class=""> ==<T> (lhs: </span><span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(52, 149, 175);" class="">T</span><span style="font-family: 'Fira Code'; font-size: 11px;" class="">, rhs: </span><span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(52, 149, 175);" class="">T</span><span style="font-family: 'Fira Code'; font-size: 11px;" class="">)</span><span style="font-family: 'Fira Code'; font-size: 11px;" class=""> -> </span><span style="font-family: 'Fira Code'; font-size: 11px; color: rgb(52, 149, 175);" class="">Bool</span></div><div class=""><br class=""></div><div class="">- Will</div><br class=""></div></div></blockquote></div><br class=""></div></body></html>