[swift-evolution] [Pitch] Moving where Clauses Out Of Parameter Lists

Trent Nadeau tanadeau at gmail.com
Wed Apr 6 21:57:47 CDT 2016


Another +1 to `where` at the end.

On Wed, Apr 6, 2016 at 10:33 PM, Matt Whiteside via swift-evolution <
swift-evolution at swift.org> wrote:

> +1 to moving the `where` clause after the function signature.
>
> -Matt
>
> > On Apr 6, 2016, at 12:36, Joe Groff via swift-evolution <
> swift-evolution at swift.org> wrote:
> >
> >
> >> On Apr 6, 2016, at 11:30 AM, Developer via swift-evolution <
> swift-evolution at swift.org> wrote:
> >>
> >> If you've ever gotten to the point where you have a sufficiently
> generic interface to a thing and you need to constrain it, possibly in an
> extension, maybe for a generic free function or operator, you know what a
> pain the syntax can be for these kinds of operations.  For example, the
> Swift book implements this example to motivate where clauses
> >>
> >> func anyCommonElements <T: SequenceType, U: SequenceType where
> T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element>
> (lhs: T, _ rhs: U) -> Bool
> >>
> >> This is noisy and uncomfortable to my eyes, and almost impossible to
> align correctly.  Per a short discussion on Twitter with Joe Groff and
> Erica Sadun, I'd like so see what the community feels about moving the
> where clause out of the angle brackets.  So that example becomes
> >>
> >> func anyCommonElements <T: SequenceType, U: SequenceType>
> >> where T.Generator.Element: Equatable, T.Generator.Element ==
> U.Generator.Element
> >> (lhs: T, _ rhs: U) -> Bool
> >>
> >> Or, if you're feeling ambitious, even
> >>
> >> func anyCommonElements <T, U>
> >> where T : SequenceType, U : SequenceType,
> >> T.Generator.Element: Equatable, T.Generator.Element ==
> U.Generator.Element
> >> (lhs: T, _ rhs: U) -> Bool
> >>
> >> Thoughts?
> >
> > 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.
> >
> > -Joe
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>



-- 
Trent Nadeau
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160406/c72bd6be/attachment.html>


More information about the swift-evolution mailing list