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 
> <swift-evolution@swift.org> 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
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to