func foo(x: Foo<SomeProtocol>) -> Foo<SomeProtocol> { ... }
func foo<T: SomeProtocol>(x: Foo<T>) -> Foo<T> { ... }
Foo
T