> On Jul 9, 2017, at 10:06, David Baraff via swift-users 
> <swift-users@swift.org> wrote:
> 
> 
>> On Jul 9, 2017, at 8:27 AM, Jens Persson <j...@bitcycle.com> wrote:
>> 
>> (Also, note that your implementation of == uses lhs === rhs thus will only 
>> return true when lhs and rhs are the same instance of SomeClass.)
> Of course — i threw that in just to make a simple example.
> 
> Followup question: what I really wanted to write was an == operator for a 
> tree:
> 
> // silly tree, useful for nothing
> class Tree : Equatable {
>    let rootData:Int
>    let children:[(String, Tree)]
> 
>    static public func ==(_ lhs:Tree, _ rhs:Tree) {
>       return lhs.rootData == rhs.rootData && 
>             lhs.children == rhs.children              // sadly, this doesn’t 
> compile
>    }
> }

Right, the `==` func is *defined* for 2-element tuples where both elements 
conform to `Equatable`, but that tuple type doesn't itself *conform* to 
`Equatable`. So the`==` func that's defined on "Array where Element: Equatable" 
can't see it.

We'd need both "conditional conformance" and "tuple conformance" in order for 
that to Just Work.

- Dave Sweeris 
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to