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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution