Hey there,

I filed this bug. Sorry that I mentioned it was to do with the TODO - I tried 
to trace it back myself, found that the substitution map was giving a null for 
the same-type requirement (and that “getDependentTypes()” explicitly skips 
them), and assumed that was the reason. Try as I might, I couldn’t figure out 
how to resolve it so I assumed I was lacking requisite knowledge of 
substitution maps to fix it (which turns out to be correct - thanks for the 
great explanation, Slava!)


> On 31 Dec 2016, at 01:09, Slava Pestov via swift-dev <swift-dev@swift.org> 
> wrote:
> 
> extension Array where Element == S, Element : P {
>   func doSomething() {}
> }
> 
> The ‘Element : P’ requirement is redundant and is dropped from the signature, 
> and ‘doSomething’ has the same exact type as if we had written:
> 
> extension Array where Element == S {
>   func doSomething() {}
> }

What if the S: P conformance is conditional or introduced by another module? 
The presence same-type constraint isn’t enough to say that S will _never_ 
conform to P (if it doesn’t already conform).


extension S: P where S.SomeType == Int, S.AnotherType: Collection, 
S.AnotherType.Index == SomeType {
 // conform to P
}

extension Array where Element == S, S.SomeType == Int, S.AnotherType: 
Collection, // …etc

vs

extension Array where Element == S, S: P

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

Reply via email to