A while back I posted about my issues in C# when I was trying to
write out an extensible collections API.  From the high level
perspective I wanted to provide useful concrete implementations
of many structures that would solve most peoples needs, and I
also wanted to include good abstract implementations of most
behaviors so that it would be pretty easy for someone to come in
and implement one of the collections interfaces without too much
burden.  From the low level perspective something I struggled
with was whether or not to base the collections on an external
iterator pattern or an internal iterator pattern.  Recall that
an internal iterator behaves like this:  ///returns false when
you iteration to stop delegate void Action(object a);  interface
IIteratable {      void Iterate(Action p); A collection
implementing the internal iterator is just passed a delegate
which it will then apply to all of its internal elements in
order.  An external iterator behaves like this:  interface
IEnumerator {      object Cu