On Wed, Apr 6, 2016 at 11:36 AM Pyry Jahkola via swift-evolution < swift-evolution@swift.org> wrote:
> On 06 Apr 2016, at 21:30, Developer via swift-evolution < > swift-evolution@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. > > > +1 already! > > 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 > > > I would actually move them as far as after everything else, and right > before the definition body. For the above function that would mean: > > func anyCommonElements<T, U>*(lhs: T, _ rhs: U) -> Bool* > * where T : SequenceType,* > > * U : SequenceType, T.Generator.Element: Equatable,* > > * T.Generator.Element == U.Generator.Element* > { > ... > } > > That would make the definition look closer to what the call site looks > like. > > The same would work for generic types too: > > public struct Dictionary<Key, Value> > where Key : Hashable > { > ... > } > I very much like this suggestion.
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution