trait Iterator[A]: def hasNext: Boolean def next(): A class IntIterator(to: Int) extends Iterator[Int]: private var current = 0 override def hasNext: Boolean = current < to override def next(): Int = if hasNext then val t = current current += 1 t else 0 end IntIterator val iterator = new IntIterator(10) iterator.next() // returns 0 iterator.next() // returns 1