// FIR_COMPARISON package a import java.* import java.util.* ///////////////////////////////////////////////////////////////////////// fun done(result : O) : Iteratee = StrangeIterateeImpl(result) abstract class Iteratee { abstract fun process(item : I) : Iteratee abstract val isDone : Boolean abstract val result : O abstract fun done() : O } class StrangeIterateeImpl(val obj: O) : Iteratee() { override fun process(item: I): Iteratee = StrangeIterateeImpl(obj) override val isDone = true override val result = obj override fun done() = obj } abstract class Sum() : Iteratee() { override fun process(item : Int) : Iteratee { return a.done(item); } abstract override val isDone : Boolean abstract override val result : Int abstract override fun done() : Int } abstract class Collection : Iterable { fun iterate(iteratee : Iteratee) : O { var current = iteratee for (x in this) { val it = current.process(x) if (it.isDone) return it.result current = it } return current.done() } }