<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><br><br><div id="AppleMailSignature">Sent from my iPhone</div><div><br>On Nov 22, 2017, at 10:12 AM, Dave DeLong &lt;<a href="mailto:swift@davedelong.com">swift@davedelong.com</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Nov 21, 2017, at 11:51 PM, Douglas Gregor via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; 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; line-break: after-white-space;" class="">Hi all,<div class=""><br class=""></div><div class="">We’re having a&nbsp;<a href="https://github.com/apple/swift/pull/12910" class="">bit of a debate</a>&nbsp;over the question of whether&nbsp;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0143-conditional-conformances.md" class="">SE-0143 “Conditional Conformances”</a>&nbsp;actually proposes any standard library changes at all, or whether they should all be brought up separately. So, I’ll pitch the pieces that I’d love to put into 4.1 to see if they’re as obvious as I think they should be :)</div><div class=""><br class=""></div><div class="">Proposal: make Optional, Array, ArraySlice, ContiguousArray, and Dictionary conform to Equatable when their type parameters are Equatable (and Set always conform to Equatable). Specifically, add to the standard library:</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>extension Optional: Equatable where Wrapped: Equatable { /*== already exists */ }</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>extension Array: Equatable where Element: Equatable { /*== already exists */ }</div><div class=""><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>extension ArraySlice: Equatable where Element: Equatable { /*== already exists */ }</div></div><div class=""><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>extension&nbsp;ContiguousArray: Equatable where Element: Equatable { /*== already exists */ }</div></div><div class=""><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>extension&nbsp;Dictionary: Equatable where Value: Equatable { /*== already exists */ }</div></div><div class=""><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>extension&nbsp;Set: Equatable { /*== already exists */ }</div></div><div class=""><br class=""></div><div class="">Motivation: we need these for ==/!= to properly compose. It’s a highly-requested feature and an obvious “first use” of conditional conformances for the standard library that is unlikely to break any code.</div><div class=""><br class=""></div><div class="">Implementation:&nbsp;<a href="https://github.com/apple/swift/pull/13046" class="">https://github.com/apple/swift/pull/13046</a></div><div class=""><br class=""></div><div class="">Thoughts?</div></div></div></blockquote><br class=""></div><div>The reason these are on concrete types and not, say, Collection is because we can’t conditionally conform protocols yet, right?</div></div></blockquote><div><br></div>Right. SE-0143 has a discussion of this limitation.&nbsp;<div><br></div><div>&nbsp; - Doug</div><div><br><blockquote type="cite"><div><div><br class=""></div><div>Dave</div></div></blockquote></div></body></html>