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 の後置好きじゃない。