<div dir="ltr">I haven't yet prepared a formal proposal, but the idea should be understood by pretty much everyone. This topic has been discussed, but deferred to "post-Swift3". I think the time for it has come.<div><br></div><div>Basically, the proposal is to make protocols non-types. To use protocol as an existential type, it must be wrapped in Any:</div><div><br></div><div>protocol ExampleProtocol {</div><div> func foo() -> Int</div><div> func bar() -> String</div><div>}</div><div><br></div><div>func f<T: ExampleProtocol>() // OK</div><div><br></div><div>func f(x: ExampleProtocol) // error: ExampleProtocol is not a type</div><div>func f(x: Any<ExampleProtocol>) // OK</div><div><br></div><div>This will syntactically separate existential types from protocols themselves and generic constraints.</div><div>The proposal does not allow for much variativity, and it looks like the proposal can be easily created and submitted.</div></div>