Joe, Just from your experience on this topic, is there any reason not to also move the primary constraints into the trailing `where` clause?
So instead of what you wrote, we'd have it this way: func foo<T, U>(x: T, y: U) -> Result<T,U> where T: Foo, U: Bar, T.Foo == U.Bar /*, etc. */ { } …as well as: struct Foo<T, U> where T: Foo, U: Bar, T.Foo == U.Bar { } Like I said earlier in this thread, I think this would also make the `extension` syntax more uniform with types (by turning generic parameters into strictly locally visible things): extension Foo<T, U> where U == Baz { // (Could've used X and Y here as well.) // Now it's clear where the names T and U come from. var bazzes: [U] { return ... } } — Pyry > I think this is a good idea, though I would put the `where` clause after the > function signature: > > func foo<T: Foo, U: Bar>(x: T, y: U) -> Result<T,U> > where T.Foo == U.Bar /*, etc. */ > { > } > > As others noted, it's also appealing to do this for type declarations too: > > struct Foo<T: Foo, U: Bar> > where T.Foo == U.Bar > { > } > > and that gives a consistent feeling with extensions and protocol declarations.
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution