https://github.com/apple/swift-evolution/blob/main/proposals/0244-opaque-result-types.md
Generics are Swift’s tool for type-level abstraction in function interfaces
특징: 호출자가 타입을 설정한다.
func zim<T: P>() -> T { ... }
let x: Int = zim() // T == Int chosen by caller
let y: String = zim() // T == String chosen by caller
it's common to want to abstract a return type chosen by the implementation from the caller.
구현부가 타입을 결정하고 싶다면?
chosen by the implementation
예를 들어, Collection 을 만들어내는 함수가 있지만, 정확히 어떤 종류의 Collection 인지는 드러내고 싶지 않을 수 있다.