<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif">In my own test, it seams that there is no way to test a type conforms to Equatable or not. </div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">`Protocol &#39;Equatable&#39; can only be used as a generic constraint because it has Self or associated type requirements`</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">Zhao Xin</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 4, 2017 at 9:27 AM, David Baraff <span dir="ltr">&lt;<a href="mailto:davidbaraff@gmail.com" target="_blank">davidbaraff@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">No, i want the equality function run if the two types are equatable, and false otherwise (even if you might deem them to be the same, e.g. two identical sets, because sets do not conform to equatable, or two identical classes, becauses classes are not (in general) equatable).<br>
<br>
So<br>
  maybeEqual(3, 3)      // true<br>
  maybeEqual(3, 4)      // false<br>
  maybeEqual([1,2,3], [1,2,3])  // false (because arrays are not actual equatable)<br>
<br>
  let d = [String:Any]()<br>
  maybeEqual(d, d)      // false because type(d) is not equatable even though obviously d is equal to itself<br>
<br>
<br>
<br>
<br>
</blockquote></div><br></div>