<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On 15 Oct 2016, at 18:21, Nevin Brackett-Rozinsky &lt;<a href="mailto:nevin.brackettrozinsky@gmail.com" class="">nevin.brackettrozinsky@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Tuples cannot conform to protocols, so despite the existence of an “==” operator for certain tuples, no tuple conforms to Equatable.<div class=""><br class=""></div><div class="">This is problematic, because it means that a function which takes a generic Equatable parameter cannot be called with a tuple argument, even though an applicable “==” operator exists.</div><div class=""><br class=""></div><div class="">(Ditto for “Comparable”,&nbsp;<i class="">mutatis mutandis</i>.)</div><div class=""><br class=""></div><div class="">Nevin</div></div></div></blockquote><br class=""></div><div>Yeah, since the operators are implemented though perhaps some kind of magic can be used? It seems strange that the following is valid:</div><div><br class=""></div><div><font face="Monaco" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>struct Foo : Equatable { let value:(Int, Int) }</font></div><div><font face="Monaco" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>func == (lhs:Foo, rhs:Foo) -&gt; Bool { return lhs.value == rhs.value }</font></div><div><br class=""></div><div>Yet tuples can't just be Equatable etc. But I'm wondering whether that falls into separate issue territory, such that it should be done first as its own proposal?</div></body></html>