<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=""><br class=""></div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><pre style="white-space: pre-wrap; background-color: rgb(255, 255, 255);" class="">&gt;&gt;&gt;<i class=""> Basically, I added back in a super-minimal protocol to fill the
</i>&gt;&gt;&gt;<i class=""> structural gap left by Sequence.  I call it “IteratorProvider” and it
</i>&gt;&gt;&gt;<i class=""> only has a single function which vends an iterator.  Collection
</i>&gt;&gt;&gt;<i class=""> adheres to this, and Iterator adheres to it by returning itself.  All
</i>&gt;&gt;&gt;<i class=""> of the other methods from Sequence remain on Iterator.  Thus anyone
</i>&gt;&gt;&gt;<i class=""> with API that only needs a single pass would take a IteratorProvider
</i>&gt;&gt;&gt;<i class=""> and then work on the iterator it provides.
</i>&gt;&gt;<i class=""> 
</i>&gt;&gt;<i class=""> That leaves us back where we are now: people will see that
</i>&gt;&gt;<i class=""> IteratorProvider is a simple, universal protocol for both single-and
</i>&gt;&gt;<i class=""> multi-pass sequences, write algorithm libraries that depend on
</i>&gt;&gt;<i class=""> multi-pass-ness, and test them with the most prevalent examples, which
</i>&gt;&gt;<i class=""> happen to be multi pass.
</i>&gt;<i class="">
</i>&gt;<i class=""> Let me make a quick counter-argument, because I thought about it a
</i>&gt;<i class=""> bit, and I don’t think it does have the same problem (especially with
</i>&gt;<i class=""> careful/better naming).
</i>&gt;<i class="">
</i>&gt;<i class=""> The difference is that the ONLY method on IteratorProvider is the one
</i>&gt;<i class=""> to get an iterator.  There is no map, filter, sort, first, count, etc…
</i>&gt;<i class=""> just a way to get a single-pass iterator.  This changes the mindset
</i>&gt;<i class=""> when using it.  You are aware that you are getting a single-pass
</i>&gt;<i class=""> iterator.
</i>
Maybe.  What's to stop people from extending IteratorProvider?</pre></blockquote><div class=""><br class=""></div></div><div class="">Nothing. &nbsp;But that is true of any protocol. &nbsp;I am ok with individual's extensions. &nbsp;They would have to use that single method to build up from anyway, so presumably they would have to consider the single pass case in their extensions...</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><pre style="white-space: pre-wrap; background-color: rgb(255, 255, 255);" class="">&gt;<i class=""> True, people might try to get the iterator a second time, but we can
</i>&gt;<i class=""> make the iteratorProvider method optional (and trying to get an
</i>&gt;<i class=""> iterator from an iterator which is spent would return nil) 
</i>&gt;<i class=""> and then they are forced to deal with the case where it was
</i>&gt;<i class=""> single-pass.
</i>
Now you can't loop over the same array multiple times.</pre></blockquote><div class="">I must be missing something. &nbsp;Isn’t that the point?</div></div><div class=""><br class=""></div><div class="">I mean, your version is called “IterableOnce”. &nbsp;Why do you want to iterate on IterableOnce more than once? &nbsp;The point (at least in my mind) is to provide a common interface for things that we want to iterate over a single time. &nbsp;If you want to iterate multiple times, use collection’s interface where you are guaranteed multi-pass.</div><div class=""><br class=""></div><div class="">That said, you actually can loop multiple times for collections by getting a new iterator from the provider (which could point to the same array storage). &nbsp;The optional just forces you to check for the single-pass case.</div><div class=""><br class=""></div><div class="">I have a feeling like I am missing your true meaning here though...</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Jon</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></body></html>