on Sat Jan 28 2017, Brent Royal-Gordon <brent-AT-architechies.com> wrote:
>> On Jan 28, 2017, at 11:48 AM, Dave Abrahams via swift-evolution >> <[email protected]> wrote: >> >> The way to handle Deque is to add this requirement to Collection when >> we get the language features to express it: >> > >> protocol Collection { >> >> associatedtype Segments : Collection >> where Segments.Element : Collection, >> Segments.Element.Element == Element >> = EmptyCollection<EmptyCollection<Element>> >> >> var segments: Segments? {get} >> ... >> } >> >> extension Collection >> where Segments == EmptyCollection<EmptyCollection<Element>> { >> var segments: Segments? { return nil } >> } > > Couldn't that be be expressed more accurately with `Never` if it were a > subtype-of-all-types? > > protocol Collection { > > associatedtype Segments : Collection > where Segments.Element : Collection, > Segments.Element.Element == Element > = Never > > var segments: Segments? {get} > ... > } > > extension Collection > where Segments == Never { > var segments: Segments? { return nil } > } Maybe, if we had the language feature, we could do that... but we don't. > Or you could say that there is always at least *one* segment: > > protocol Collection { > > associatedtype Segments : Collection > where Segments.Element : Collection, > Segments.Element.Element == Element > = CollectionOfOne<Self> > > var segments: Segments {get} > ... > } > > extension Collection > where Segments == CollectionOfOne<Self> { > var segments: Segments { return CollectionOfOne(self) } > } That's not actually helpful, because segmented algorithms need to be able to use the presence of segments to stop recursing :-) -- -Dave _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
