Avatar
ジェネリック引数と opaque result type の関係について考えてたんですが、その二つは双対の関係になってませんか?つまり、 func useFoo<F: Foo>(_ foo: F) { /* ... */ } func makeFoo() -> some Foo { /* ... */ } があったとして、
  • useFoo の利用者は Foo の具体的な型を決定し、実装者はある Foo についてコードを記述する。
  • makeFoo の実装者は Foo の具体的な型を決定し、利用者はある Foo についてコードを記述する。
という関係があるということです。どちらも、( specialize されれば)具体的な型で記述されたのと同等のパフォーマンスを実現できるという点、具象型と抽象型を橋渡しするものである点で共通です。