<div dir="ltr"><div style="font-size:13px;line-height:19.5px"><b>Problem:<br></b></div><div style="font-size:13px;line-height:19.5px">.prefix() works eagerly even on LazyCollectionType. This means access is not O(1).</div><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px"><b>Implications:</b></div><div style="font-size:13px;line-height:19.5px">There&#39;s no way to only get the first N elements of a lazy sequence without a nasty for loop. If prefix() used on a lazy sequence, it&#39;ll trigger computation on the whole array, just to return the first N elements.</div><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px"><b>Proposal:</b></div><div style="font-size:13px;line-height:19.5px">It would be more more useful if lazy.&lt;insert methods here&gt;.prefix() returned</div><div style="font-size:13px;line-height:19.5px">LazyPrefixCollection&lt;Generator.Element&gt;</div><div style="font-size:13px;line-height:19.5px">instead of</div><div style="font-size:13px;line-height:19.5px">Slice&lt;LazyCustomCollection&lt;Range&lt;Generator.Element&gt;&gt;&gt;.</div><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px">That way prefix() could be used to chain <b>pure lazy operations</b>, like lazy.filter().map().filter().prefix().map() which can be quite useful in some cases.</div><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px">I understand that this has implications, and it would make prefix() less consistent in terms of return type.</div><div style="font-size:13px;line-height:19.5px">But, this pattern seem to be used in this context already - it wouldn&#39;t be a much different than how how lazy.filter() is implemented, since it also returns a custom LazySequenceType instead of SequenceType.</div><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px">Has this been considered before? Would there be any cases where this would create unintended side effects?</div><div style="font-size:13px;line-height:19.5px">As far as I see, it wouldn&#39;t change the meaning and behaviour of prefix(), only would it extend its usefulness.</div><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px">I submitted a PR to the SwiftSequence library that demonstrates the implementation: <a href="https://github.com/itchingpixels/SwiftSequence/commit/26101e5aec6c266048bbad4db7b44b9c453f07ca" target="_blank">https://github.com/itchingpixels/SwiftSequence/commit/26101e5aec6c266048bbad4db7b44b9c453f07ca</a></div><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px">Thanks a lot!</div><div dir="ltr"><div style="font-size:13px;line-height:19.5px"><br></div><div style="font-size:13px;line-height:19.5px">Mark</div></div></div>