<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hello,</div><div class=""><br class=""></div>I was planning to wait pitching this after I have tested the implementation, but I’m getting anxious, that I’ll miss the 4.0 boat, so here goes. This is early draft. I would especially appreciate analysis of the impact on source compatibility and ABI stability.&nbsp;<div class=""><br class=""></div><div class=""><div class=""><a href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md" class="">https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md</a></div></div><div class=""><br class=""></div><div class=""><h1 style="box-sizing: border-box; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; line-height: 1.25; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-variant-ligatures: normal; orphans: 2; widows: 2; margin-top: 0px !important;" class="">Sequence Cleanup</h1><ul style="box-sizing: border-box; padding-left: 2em; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""><li style="box-sizing: border-box;" class="">Proposal:&nbsp;<a href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none;" class="">SE-NNNN</a></li><li style="box-sizing: border-box; margin-top: 0.25em;" class="">Authors:&nbsp;<a href="https://github.com/palimondo" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none;" class="">Pavol Vaskovic</a>,&nbsp;<a href="https://github.com/swiftdev" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none;" class="">Author 2</a></li><li style="box-sizing: border-box; margin-top: 0.25em;" class="">Review Manager: TBD</li><li style="box-sizing: border-box; margin-top: 0.25em;" class="">Status:&nbsp;<span style="box-sizing: border-box; font-weight: 600;" class="">Pitch</span></li></ul><h2 style="box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""><a id="user-content-introduction" class="anchor" href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md#introduction" aria-hidden="true" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Introduction</h2><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">This proposal is to change the default implementation of&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">protocol Sequence</code>&nbsp;methods so that all operations are eager (not lazy) and return&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Array&lt;Element&gt;</code>. This removes the need to return type erased&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">AnySequence</code>&nbsp;that negatively impacts performance in order to hide the heterogenous implementation and provides Swift users with more homogenous interface. The lazy computation of&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">prefix</code>&nbsp;and&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">dropFirst</code>&nbsp;methods will be moved to&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">LazySequence</code>.</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">Swift-evolution thread:&nbsp;<a href="https://lists.swift.org/pipermail/swift-evolution/" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none;" class="">Discussion thread topic for that proposal</a></p><h2 style="box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""><a id="user-content-motivation" class="anchor" href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md#motivation" aria-hidden="true" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Motivation</h2><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">The API of&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Sequence</code>&nbsp;protocol evolved over time to include irregular mixture of eager and lazy methods. In particular, it included lazy implementation of&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">prefix</code>&nbsp;and&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">dropFirst</code>&nbsp;from before the lazy sequence views found their home in&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">LazySequence</code>&nbsp;protocol. They are implemented by internal classes that wrap the underlying sequence and delay the computation until its elements are requested through iteration.&nbsp;<a href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/SE-0045.md" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none;" class="">SE-0045</a>&nbsp;added third internal class to implement&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">drop(while:_)</code>, that eagerly drops the required element and wraps the partially used&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Iterator</code>&nbsp;from the original sequence.</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">All other default implementations of&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Sequence</code>&nbsp;methods are realized on top of&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Array</code>s and perform their computation eagerly. Due to the requirements of the associated type&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">SubSequence</code>&nbsp;returned from many&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Sequence</code>&nbsp;protocol methods, all these heterogeneous implementations need to be hidden using type erasure by wrapping the results in&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">AnySequence</code>. The heterogeneity of implementation is currently well documented, if the user notices the different complexity of the methods that return lazy wrappers -- Complexity: O(1), instead of O(n). But given the existence of other lazy sequence views on&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">LazySequence</code>&nbsp;one might be surprised by this irregularity and overlook this historical quirk of implementation.</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">Furthermore, the presence of&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">AnySequence</code>&nbsp;and&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">AnyIterator</code>&nbsp;it returns, present serious optimization obstacle for the Swift compiler, when we chain the calls to these sequence methods. This results is non-specialized generic iterator, that ends up in a tight for-in loop. Currently there is no&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">prefix</code>&nbsp;implementation on&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">LazySequence</code>&nbsp;- preventing the workaround for avoiding&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">AnySequence</code>&nbsp;by going through&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">.lazy</code>&nbsp;call.</p><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; font-variant-ligatures: normal; font-variant-east-asian: normal; font-variant-position: normal; font-stretch: normal; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(246, 248, 250); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal;" class="">s.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">lazy</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">prefix</span>(maxIterations).<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">prefix</span>(<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">while</span>:{ <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> })</pre></div><h2 style="box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""><a id="user-content-proposed-solution" class="anchor" href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md#proposed-solution" aria-hidden="true" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Proposed solution</h2><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">We should take this opportunity to clean up the interface of default&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Sequence</code>&nbsp;implementation to present Swift users with homogenous interface of eager methods that directly return&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">Array</code>&nbsp;as&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">SubSequence</code>. We'll move the lazy implementation for&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">prefix</code>&nbsp;and&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">dropFirst</code>&nbsp;to&nbsp;<code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px;" class="">LazySequence</code>.</p><h2 style="box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""><a id="user-content-detailed-design" class="anchor" href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md#detailed-design" aria-hidden="true" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Detailed design</h2><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">The following changes will be made to the standard library:</p><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; font-variant-ligatures: normal; font-variant-east-asian: normal; font-variant-position: normal; font-stretch: normal; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(246, 248, 250); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal;" class=""><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">extension</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Sequence</span></span> {

  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">suffix</span>(<span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">_</span> <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">maxLength</span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }
  
  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">split</span>(
    <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);"><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">maxSplits</span></span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">max</span>,
    <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);"><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">omittingEmptySubsequences</span></span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Bool</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">true</span>,
    <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">whereSeparator</span> <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">isSeparator</span>: (<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">throws</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Bool</span>
  ) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">rethrows</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [[<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>]] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }
}

<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">extension</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Sequence</span></span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">where</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Equatable</span></span> {
  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">split</span>(
    <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);"><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">separator</span></span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>,
    <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);"><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">maxSplits</span></span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">max</span>,
    <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);"><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">omittingEmptySubsequences</span></span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Bool</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">true</span>
  ) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [[<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>]] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }
}

<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">extension</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Sequence</span></span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">where</span>
  <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">SubSequence</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Sequence</span></span>,
  <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">SubSequence</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">==</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>,
  <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">SubSequence</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">SubSequence</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">==</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">SubSequence</span> {

  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> Returns a subsequence containing all but the given number of initial</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> elements.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span>  
  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> - Complexity: O(*n*), where *n* is the length of the sequence.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">@_inlineable</span>
  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">dropFirst</span>(<span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">_</span> <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">n</span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }

  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> Returns a subsequence containing all but the given number of final</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> elements.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span>
  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> - Complexity: O(*n*), where *n* is the length of the sequence.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">@_inlineable</span>
  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">dropLast</span>(<span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">_</span> <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">n</span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }
  
  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> Returns a subsequence by skipping the initial, consecutive elements that</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> satisfy the given predicate.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span>
  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> - Complexity: O(*n*), where *n* is the length of the collection.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> - SeeAlso: `prefix(while:)`</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">@_inlineable</span>
  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">drop</span>(
    <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">while</span> <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">predicate</span>: (<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">throws</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Bool</span>
  ) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">rethrows</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }

  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> Returns a subsequence, up to the specified maximum length, containing the</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> initial elements of the sequence.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span>
  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> - Complexity: O(*n*), where *n* is the length of the sequence.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">@_inlineable</span>
  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">prefix</span>(<span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">_</span> <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">maxLength</span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }
  
  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> Returns a subsequence containing the initial, consecutive elements that</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> satisfy the given predicate.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span>
  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> - Complexity: O(*n*), where *n* is the length of the collection.</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">///</span> - SeeAlso: `drop(while:)`</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">@_inlineable</span>
  <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">prefix</span>(
    <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">while</span> <span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">predicate</span>: (<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">throws</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Bool</span>
  ) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">rethrows</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> [<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Iterator</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Element</span>] { <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">...</span> }
}

<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> TODO describe lazy views for prefix and dropFirst</span></pre><div class=""><span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><br class=""></span></div></div><h2 style="box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""><a id="user-content-source-compatibility" class="anchor" href="https://github.com/palimondo/swift-evolution/blob/sequence-cleanup/proposals/NNNN-SequenceCleanup.md#source-compatibility" aria-hidden="true" style="box-sizing: border-box; color: rgb(3, 102, 214); text-decoration: none; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a></h2></div></body></html>