Why is this? Why would we want to hard-code protocols into two distinct categories?
I have always thought that the ability to use PAT's (Protocols with Associated Types) or Self-constrained protocols as proper existentials is merely lacking current implementation, but is something that will happen in the future. I do not believe that people using protocols should set in stone that which category of protocol it is, I would like to have protocols that can do as much as the current implementation allows, if possible have PATs working in every situation (I guess there was some sort of automatic type erasure even tossed around).
While I like that a programming language encourages good coding habits, I think straightforward and easy to use code is sometimes better than super performant code. There are situations where the most performance is needed, and there needs to be a way to do that, but I wouldn't want to impose complexity on users just for the sake of guaranteeing the most performant code.