Dualizing IEnumerable and IEnumerator
It turns out IEnumerable and IEnumerator is a pretty rad pair interfaces. It gives us an abstraction over working with synchronous collections.
A synchronous collection, is a list of things that have already been evaluated. The IEnumerable and IEnumerator pair interface, allows us to pull items from an already evaluated collection.
Through some cleaver maths - a process known as Dualizing - we can flip the IEnumerable and IEnumerator around, to support a push based interaction pattern. The IObservable IObserver pair, the building blocks of Reactive Extensions.
Check it out!