abstract sclass Convergent extends ItIt { A value; bool stepped, done; public bool hasNext() { if (done) false; if (!stepped) { stepped = true; step(); } ret !done; } public A next() { assertTrue(hasNext()); stepped = false; ret value; } abstract void step(); }