>
> I think that *all* methods should be available - at least in principle - with
> associated types
> - replaced by their upper bounds (i.e. Any if no constraints have been given
> either by the protocol definition itself or th existential) if in covariant
> position and
> - replaced by their lower bounds if in contravariant position
>
> As it is not possible to define lower bounds in Swift, the lower bounds are
> always the bottom type (called `Nothing` in Swift and not be confused with
> optionals). The bottom type has no members and therefore a method referencing
> that type cannot be called and is effectively not available.
>
Thanks for the feedback! So methods that have associated types in contravariant
position would have those types be Nothing, unless there was a concrete type
bound to that associated type in the Any's where clause?
Example
protocol MyProtocol {
associatedtype AssocType1
associatedtype AssocType2
func foo(x: AssocType1, y: AssocType2)
}
let a : Any<MyProtocol>
// on 'a', foo is exposed as 'foo(x: Nothing, y: Nothing)', and can thus not be
called
let b : Any<MyProtocol where .AssocType1 == Int>
// on 'b', foo is exposed as 'foo(x: Int, y: Nothing)' and still can't be called
let c : Any<MyProtocol where .AssocType1 == Int, .AssocType2 == String>
// on 'c', foo is exposed as 'foo(x: Int, y: String)', and can therefore be
called
Let me know if this is what you had in mind.
Austin
> -Thorsten
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution