[swift-evolution] [Proposal] Synthesizing Equatable/Hashable conformance for enums and structs

Tony Allevato tony.allevato at gmail.com
Wed Aug 9 11:26:51 CDT 2017


Thanks for the questions!

On Wed, Aug 9, 2017 at 9:18 AM Nevin Brackett-Rozinsky <
nevin.brackettrozinsky at gmail.com> wrote:

> Looks good to me, though I have some clarifying questions. For a type
> which conforms to both Equatable and Hashable:
>
> 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?
>

Yes, because Hashable implies Equatable. (This is also the case with
Codable, where conforming to Codable synthesizes both Decodable and
Encodable.)

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).


> 2. Will it be possible to automatically derive “==” while manually
> implementing “hashValue”?
> 2a. If so, will “Equatable” and “Hashable” both need to appear in the
> declaration, or will “Hashable” alone suffice?
>

> 3. Will it be possible to automatically derive “hashValue” while manually
> implementing “==”?
> 3a. If so, will “Equatable” and “Hashable” both need to appear in the
> declaration, or will “Hashable” alone suffice?
>

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.



> Thanks,
>
> Nevin
>
>
> On Wed, Aug 9, 2017 at 11:36 AM, Tony Allevato via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>> 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.
>>
>> The pull request for the proposal is here:
>> https://github.com/apple/swift-evolution/pull/706. (Direct link to
>> proposal text:
>> https://github.com/allevato/swift-evolution/blob/b3dcffc2e6f74e17eba05a6eb7eb29ad58bf36a3/proposals/NNNN-synthesize-equatable-hashable.md
>> )
>>
>> The pull request for the implementation (rebased last night) is here:
>> https://github.com/apple/swift/pull/9619
>>
>> Thanks all!
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170809/13c0d65f/attachment.html>


More information about the swift-evolution mailing list