<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hello all,<div class=""><br class=""></div><div class="">Currently there exist at least four 'type-erased' sequence/collection types: AnySequence, AnyForwardCollection, AnyBidirectionalCollection, and AnyRandomAccessCollection.</div><div class=""><br class=""></div><div class="">The three Any*Collection types can be conceptually arranged into a 'ladder', in which collections can be constructed unconditionally from collection types above themselves, and conditionally from collection types below themselves. I've put together a little ASCII image of this here: (<a href="https://gist.github.com/austinzheng/829425242bef1573b668" class="">https://gist.github.com/austinzheng/829425242bef1573b668</a>).</div><div class=""><br class=""></div><div class="">Note that AnySequence doesn't currently fit into this ladder: Any*Collection instances can't easily be constructed from AnySequences. SR-119 (<a href="https://bugs.swift.org/browse/SR-119" class="">https://bugs.swift.org/browse/SR-119</a>) aims to change that. As per that ticket, I propose that we add three promotion APIs, sketched out as following:</div><div class=""><br class=""></div><div class="">extension AnyForwardCollection {</div><div class="">&nbsp; &nbsp; init?&lt;Element&gt;(_: AnySequence&lt;&nbsp;Element&gt;)</div><div class="">}</div><div class=""><br class=""></div><div class=""><div class="">extension AnyBidirectionalCollection {</div><div class="">&nbsp; &nbsp; init?&lt;Element&gt;(_: AnySequence&lt;&nbsp;Element&gt;)</div><div class="">}</div></div><div class=""><br class=""></div><div class=""><div class="">extension AnyRandomAccessCollection {</div><div class="">&nbsp; &nbsp; init?&lt;Element&gt;(_: AnySequence&lt;&nbsp;Element&gt;)</div><div class="">}</div></div><div class=""><br class=""></div><div class="">Like their Any*Collection --&gt; Any*Collection antecedents, these initializers construct a new Any*Collection out of an existing AnySequence, but only if the underlying sequence is compatible, and without copying the underlying sequence.</div><div class=""><br class=""></div><div class="">I'll also have to examine SE-0014 (<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0014-constrained-AnySequence.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0014-constrained-AnySequence.md</a>) more closely to see if it has any effects on this proposal.</div><div class=""><br class=""></div><div class="">I plan on submitting a formal proposal at some point (probably by the end of the coming week), but first wish to solicit feedback, opinions, concerns, etc. Thanks for your time.</div><div class=""><br class=""></div><div class="">Best,</div><div class="">Austin</div>
</body></html>