"Produces the elements of a [[stream|Iterable]]. For 
 example, this class has an `Iterator` that produces the 
 integers from `min` to `max`:
 
     class IntegerIterable(Integer min, Integer max) 
            satisfies {Integer*} {
        iterator() => object satisfies Iterator<Integer> {
            variable value i = min;
            next() => i<=max then i++ else finished;
        };
     }
 
 An iterator is _exhausted_ when [[next]] produces the 
 value [[finished]]."
see (`interface Iterable`)
by ("Gavin")
tagged("Streams")
shared interface Iterator<out Element> {
    "The next element, or [[finished]] if there are no more 
     elements to be iterated.
     
     Repeated invocations of `next()` for a given iterator
     must eventually produce any given element of the stream
     to which the iterator belongs. A given iterator must
     not produce the same element of the stream more often
     than the element occurs in the stream.
     
     If an invocation of `next()` for a given iterator 
     produces the value `finished`, then every future 
     invocation of `next()` for that iterator must also
     produce the value `finished`.
     
     An iterator for a nonfinite stream may never produce
     the value `finished`.
     
     An iterator for a nonempty stream must produce at least
     one value of type `Element`."
    shared formal Element|Finished next();
}