[swift-evolution] Pitch: Automatically deriving Equatable/Hashable for more value types

Chris Lattner clattner at nondot.org
Sat May 6 18:17:16 CDT 2017


On May 5, 2017, at 11:33 AM, Tony Allevato via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> 
> Can the opt-in conformance be declared in an extension?  If so, can the extension be in a different module than the original declaration?  If so, do you intend any restrictions, such as requiring all members of the type declared in a different module to be public?  My initial thought is that this should be possible as long as all members are visible.
> 
> Declaring the conformance in an extension in the same module should definitely be allowed;

Please follow the precedent of the Codable proposal as closely as possible.  If you’d like this to be successful for Swift 4, you should look to scope it as narrowly as possible.  Because it is additive (with opt-in), it can always be extended in the future.

> I believe this would currently be the only way to support conditional conformances (such as the `Optional: Hashable where Wrapped: Hashable` example in the updated draft), without requiring deeper syntactic changes.

This proposal doesn’t need to cover all cases, since it is just sugaring a (very common) situation.  Conditional conformances to Hashable could be written manually.

> I'm less sure about conformances being added in other modules,

It is a bad idea, it would break resilience of the extended type.

> But after writing this all out, I'm inclined to agree that I'd rather see structs/enums make it into Swift 4 even if it meant pushing classes to Swift 4+x.

Agreed, keep it narrow to start with.

Also, I don’t know how the rest of the core team feels about this, but I suspect that they will be reticent to take an additive proposal at this late point in the schedule, unless someone is willing to step up to provide an implementation.

-Chris


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170506/b8577b08/attachment.html>


More information about the swift-evolution mailing list