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