class List {
def isEmpty ( ): Int = this.isEmpty ( );
def head ( ): Int = this.head ( );
def tail ( ): List = this.tail ( );
def cons (x : Int ): List = this.cons (x );
// ..
}
class Cons extends List {
val head : Int;
val tail : List;
def isEmpty ( ): Int = false;
def head ( ): Int = this.head;
def tail ( ): List = this.tail;
def cons (x : Int ): List = new Cons (x, this );
}