Avatar
↓みたいにすると、 foo1some Foo 間で別名を付けれてしまうので微妙。 var a: Bar = foo1()<Bar> let b: Baz = foo2()<Baz> a = b // エラー: `Bar` を `Baz` に代入できないのは自然に見える let c: Qux = foo1()<Qux> a = c // `foo1` の `some Foo` に別の名前を与えられてしまっている
2:06 AM
↑opaque typealiasをつけたところで、 依然として some Fooで受ける形にかけちゃいますよね
なので、 some Foo ではなく -> <F: Foo> F を採用したとして、うまく馴染む記法はないかなぁと。
2:08 AM
=== ↓これ、 where 後置記法を導入しちゃったから where でやろうとすると混ざっちゃうよね。 <> の中に書けばいけるかもだけど、引数側の型パラと並ぶとややこしそう。
こういうのはいけるか、今回の提案だと範囲外?だけど
func makeColl<X>() -> some Collection<.Element == X>
(edited)
2:10 AM
↓みたいになりそう。 func makeColl<X: Foo>() -> <C: Collection where C.Element == X> C where X.Bar == Int (edited)
2:10 AM
しかも、戻り値側の where だけ後置できないの微妙。
2:10 AM
あまり where の後置好きじゃない。