<div dir="ltr">Thanks for the questions!<br><br><div class="gmail_quote"><div dir="ltr">On Wed, Aug 9, 2017 at 9:18 AM Nevin Brackett-Rozinsky &lt;<a href="mailto:nevin.brackettrozinsky@gmail.com">nevin.brackettrozinsky@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Looks good to me, though I have some clarifying questions. For a type which conforms to both Equatable and Hashable:<div><br></div><div>1. To automatically derive both Equatable and Hashable, will it be sufficient to declare “struct Foo: Hashable” (since Hashable refines Equatable) or must “Equatable” also be listed?</div></div></blockquote><div><br></div><div>Yes, because Hashable implies Equatable. (This is also the case with Codable, where conforming to Codable synthesizes both Decodable and Encodable.)</div><div><br></div><div>Implementation-wise, the compiler asks &quot;does this type conform to X&quot;, which is a distinct question from &quot;does this type explicitly state X in its protocol conformance list&quot;. The former is the correct question to always ask, IMO—I don&#39;t believe there are any places in the compiler where the latter would produce different behavior than the former (but someone please correct me if I&#39;m wrong).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>2. Will it be possible to automatically derive “==” while manually implementing “hashValue”?<br></div><div><div>2a. If so, will “Equatable” and “Hashable” both need to appear in the declaration, or will “Hashable” alone suffice?</div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div></div><div><br></div><div>3. Will it be possible to automatically derive “hashValue” while manually implementing “==”?<div>3a. If so, will “Equatable” and “Hashable” both need to appear in the declaration, or will “Hashable” alone suffice?</div></div></div></div></blockquote><div><br></div><div>Either or both members can be replaced with manual implementations—of course it&#39;s up to the user at that point to keep those implementations behaviorally consistent. Doing so does not change the behavior described above regarding the protocol conformance list.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><br></div></div></div><div>Thanks,</div><div><br></div><div>Nevin</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"></div></div><div class="gmail_extra"><div class="gmail_quote">On Wed, Aug 9, 2017 at 11:36 AM, Tony Allevato via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br></div></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Now that Swift 5 is taking proposals, I&#39;m dusting off my proposal to synthesize Equatable/Hashable conformance for enums and structs. I had implemented this a few months ago hoping to squeeze it in by the Swift 4 deadline, but unfortunately the timeline was too tight.<br></div><div><br></div><div>The pull request for the proposal is here: <a href="https://github.com/apple/swift-evolution/pull/706" target="_blank">https://github.com/apple/swift-evolution/pull/706</a>. (Direct link to proposal text: <a href="https://github.com/allevato/swift-evolution/blob/b3dcffc2e6f74e17eba05a6eb7eb29ad58bf36a3/proposals/NNNN-synthesize-equatable-hashable.md" target="_blank">https://github.com/allevato/swift-evolution/blob/b3dcffc2e6f74e17eba05a6eb7eb29ad58bf36a3/proposals/NNNN-synthesize-equatable-hashable.md</a>)</div><div><br></div><div>The pull request for the implementation (rebased last night) is here: <a href="https://github.com/apple/swift/pull/9619" target="_blank">https://github.com/apple/swift/pull/9619</a></div><div><br></div><div>Thanks all!</div><div><br></div></div>
<br></blockquote></div></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div></div></blockquote></div></div>