> Am 27.05.2016 um 20:47 schrieb Matthew Johnson via swift-evolution > <swift-evolution@swift.org>: > > >> On May 27, 2016, at 12:05 PM, Charles Srstka via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >>> On May 27, 2016, at 9:31 AM, plx via swift-evolution >>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >>> >>> For the Sequence/Collection it’s a lot of work for IMHO a rather minor >>> convenience, but for more-complex type associated-type relationships it >>> could start to pay its own way. >> >> Is it really that minor, though? For something so commonly encountered as >> methods that take sequences/collections, this: >> >> func doSomething(foos: [Foo], bars: [Bar], bazzes: [Baz]) >> >> is not only a whole lot easier to type, but is worlds clearer to read than: >> >> func doSomething<S: SequenceType, T: SequenceType, U: SequenceType where >> S.Generator.Element == Foo, T.Generator.Element == Bar, U.Generator.Element >> == Baz>(foos: S, bars: T, bazzes: U) >> >> Not only is the latter line intimidating to look at as is, but it separates >> the contained type from the parameters themselves. Given how unwieldy this >> second form is, it seems almost certain that the former line will be used >> more frequently in the real world. > > When generalized existentials are introduced (Austin Zheng has a proposal for > this) you will be able to do this (assuming we switch to the `&` syntax: > > typealias SequenceOf<T> = Sequence where .Element == T > > func doSomething(foos: SequenceOf<Foo>, bars: SequenceOf<Bar>, bazzes: > SequenceOf<Baz>)
That’s a really nice solution, which gets even nicer with plx suggestion of putting the typealias within the protocol like this: protocol Sequence { typealias of<E> = S: Self where .Element == E } -Thorsten > > It’s still slightly more verbose than the array shorthand, but it’s a far cry > from what you have to do with generics today. > > If you wanted it to be generic you could write it as: > > func doSomething<S: SequenceOf<Foo>, T: SequenceOf<Bar>, > SequenceOf<Baz>(foos: S, bars: T, bazzes: U) > >> >> Charles >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution