Foo
」を利用する人が「ある Foo
」に仮の名前(型パラメータ)を与えるのと同じように、 opaque result type についても「ある Foo
」を利用する人、つまり some Foo
を return
する関数を利用する人が仮の名前を与えるような構文もあり得る気がします。そうすれば、字面上同じ some Foo
同士で代入できない↓のようなコードにならずに、それぞれの some Foo
に利用者側が別の名前を割り当てて使うことができるかもしれません。 var a: some Foo = foo1() let b: some Foo = foo2() a = b // `some Foo` 同士の代入だけどコンパイルエラー
(edited)func foo1() -> some Foo { /* ... */ } func foo2() -> some Foo { /* ... */ } var a: Bar = foo1<Bar>() // `some Foo` に `Bar` の名前を付ける let b: Baz = foo2<Baz>() // `some Foo` に `Baz` の名前を付ける a = b // `Baz` を `Bar` に代入しようとしているのでコンパイルエラー
ただし、 foo1
の戻り値同士は代入可能なので、 foo1
の呼び出し箇所間で同じ名前を与えるためにどういう構文が良いのかわかりません。 (edited)