[swift-evolution] [Manifesto] Completing Generics

Slava Pestov spestov at apple.com
Wed Mar 2 22:50:05 CST 2016

> On Mar 2, 2016, at 7:57 PM, Developer via swift-evolution <swift-evolution at swift.org> wrote:
> Isn't "open existential" code for "casting ∃ to ∀"? Dispatch on the underlying type is brittle and anti-modular.  I should know, I tried to recover GADTs under the old system!  I shudder to think of what further horrors I could concoct with this pattern formalized in the language.

Think of it more as “casting P to a new generic type parameter T : P”, where P is a protocol type. Your code will not have static knowledge of the concrete type bound to T — you just know it’s some type that conforms to P.

It’s interesting that protocol extensions today get you some of the way there — the existential is effectively opened to a special generic type parameter “Self" inside the body of a protocol extension method:

protocol P {

func doSomething<T : P>(t: T) {
	… do stuff with T

extension P {
	func doSomething() {

let p: P = …


> ~ Robert Widmann
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

More information about the swift-evolution mailing list