> On May 23, 2016, at 11:08 AM, Austin Zheng via swift-evolution > <[email protected]> wrote: > >> >> 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.
>From the standpoint of the interface of the existential these methods are not >callable. That is the most important point and your proposal already covers >this. If contravariance were ever introduced into Swift we would want to include updates to existentials in the process of adding it. > > Austin > >> -Thorsten > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
