<div dir="ltr"><div class="gmail_msg" style="font-size:13px">When using enums with associated values, it&#39;s often necessary to check for equality between two enum objects in some way. That can lead to boilerplate code like this:<br class="gmail_msg"></div><div class="gmail_msg" style="font-size:13px"><br class="gmail_msg"></div><div class="gmail_msg" style="font-size:13px">enum Option {</div><div class="gmail_msg" style="font-size:13px">    case foo(String)</div><div class="gmail_msg" style="font-size:13px">    case bar(Int)</div><div class="gmail_msg" style="font-size:13px"><span class="inbox-m_-1513968597867029764Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span>case zip</div><div class="gmail_msg" style="font-size:13px">}</div><div class="gmail_msg" style="font-size:13px"><br class="gmail_msg"></div><div class="gmail_msg" style="font-size:13px">func ==(lhs: Option, rhs: Option) -&gt; Bool {</div><div class="gmail_msg" style="font-size:13px">    switch (lhs, rhs) {</div><div class="gmail_msg" style="font-size:13px">    case (.foo(let a), .foo(let b)) where a == b: return true</div><div class="gmail_msg" style="font-size:13px">    case (.bar(let a), .bar(let b)) where a == b: return true</div><div class="gmail_msg" style="font-size:13px">    case (.zip, .zip): return true</div><div class="gmail_msg" style="font-size:13px">    default: return false</div><div class="gmail_msg" style="font-size:13px">    }</div><div class="gmail_msg" style="font-size:13px">}</div><div class="gmail_msg" style="font-size:13px"><br class="gmail_msg"></div><div class="gmail_msg" style="font-size:13px">..which results in code duplication and opens the door to potential logic errors.</div><div class="gmail_msg" style="font-size:13px"><br class="gmail_msg"></div><div class="gmail_msg" style="font-size:13px">Instead, what if enums with associated values were automatically Equatable when all their associated values were Equatable? That would remove the need for such boilerplate code.</div><div class="gmail_msg" style="font-size:13px"><br class="gmail_msg"></div><div class="gmail_msg" style="font-size:13px">The Swift language guide states that custom classes and structs don&#39;t receive a default implementation of the == operator because the compiler can&#39;t guess what &quot;equality&quot; means for them. However, I think this could make sense for enums. An enum case, even with associated values, seems closer to a value itself than an object with logic and state.</div><div class="gmail_msg" style="font-size:13px"><br class="gmail_msg"></div><div class="gmail_msg" style="font-size:13px">I&#39;d be interested to hear any thoughts on this. Would this be a beneficial addition?</div></div>