foo1
の some 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` に別の名前を与えられてしまっている
some Foo
ではなく -> <F: Foo> F
を採用したとして、うまく馴染む記法はないかなぁと。
where
後置記法を導入しちゃったから where
でやろうとすると混ざっちゃうよね。 <>
の中に書けばいけるかもだけど、引数側の型パラと並ぶとややこしそう。 func makeColl<X>() -> some Collection<.Element == X>
(edited)func makeColl<X: Foo>() -> <C: Collection where C.Element == X> C where X.Bar == Int
(edited)where
だけ後置できないの微妙。where
の後置好きじゃない。