It seems to be an interface stylistic choice to only show protocol conformances instead of the full (correct) type signature. As an example:
- in the first example
foo's type signature is shown asfoo(_ x: Collection) - in the second example the type signature doesn't take in account the class
C1 - in the last example
maxis shown as
max(_ x: Comparable, _ y: Comparable) -> Comparable
which with Unlock Existential Types for All Protocols may be misleading.
In the first three examples, typing x in the function body suggests x: Collection, x: P1 & P2 and x: P1 & P2 respectively, i.e. x's conformances instead of its type. Should it be filed as a bug?
