To clarify, there are two things that look the same: the protocol Category
and the existential type (also called protocol type) Category
. Even though they look the same, they are actually two different things. When you use a protocol as a type, you are using the existential type. That existential type cannot conform to any protocols, even itself (i.e., Category
does not conform to Category
).
For more information, see the corresponding educational note for this topic.
That is not quite correct. Even if we change the spelling of existential types, it does not mean that you can conform such types to protocols; and even if we implement a feature permitting users manually to state such conformances, it does not mean that it is possible (in fact, it is impossible) to write a conformance that can correctly conform an existential type to any arbitrary protocol. For one example, see the educational note.