Yeah I don’t see a problem. It’s the same way that protocol extensions just
work. Think of this automatic synthesis as a really flexible protocol extension:
extension Hashable where Members : Hashable {
var hashValue : Int {
return self.allMembers.reduce(^) // Or whatever combiner is best
}
}
> On 29 May 2016, at 1:19 PM, Jon Shier via swift-evolution
> <[email protected]> wrote:
>
>> The problem with this is that it doesn’t differentiate between synthesized
>> and manual conformance. You won’t get error messages you otherwise would
>> when you intend to supply manual conformance. It is also less clear to a
>> reader of the code that the default, compiler synthesized implementation is
>> being generated.
>
> I don’t think it’s reasonable to force the language down the path where
> developers don’t have to be familiar with its features in order to use them
> correctly. If types in Swift were to automatically gain Equatable and
> Hashable conformances whenever they were used by something that required
> them, that would be a core language feature, like type inference, that even
> junior developers in the language would need to know. Yet few (though not
> none) would insist that all types be manually declared, despite otherwise not
> knowing when our type inference goes wrong. It’s just a basic feature of the
> language that anyone using the language should know about, otherwise it can
> bite them in the ass when weird compiler errors start popping up.
> Frankly, IMO, this is an obvious case of 80/20 optimization. In the
> vast majority of cases where my types are trivially equatable, I should just
> be able to declare them as such and gain the compiler-synthesized ==. In the
> cases where that’s not possible, the compiler can emit an error. And in the
> cases where I want a custom == implementation I can provide it. Requiring a
> new keyword and not making this feature as simple as possible because the
> rare developer with a custom type who doesn’t want the synthesized == they
> just said they did by declaring Equatable conformance is an unnecessary
> defaulting to the rare case.
>
>
>
>
> Jon Shier
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution