<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 <<a href="mailto:nevin.brackettrozinsky@gmail.com">nevin.brackettrozinsky@gmail.com</a>> 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 "does this type conform to X", which is a distinct question from "does this type explicitly state X in its protocol conformance list". The former is the correct question to always ask, IMO—I don'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'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'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"><<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>></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'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>