//package straightparse;
abstract class List {
public abstract A accept (ListVisitor v);
}
class NIL extends List {
public NIL () { }
public A accept (ListVisitor v) {
return v.visit (this);
}
}
class CONS extends List {
public a hd;
public List tl;
public CONS (a x, List xs) {
this.hd = x;
this.tl = xs;
}
public A accept (ListVisitor v) {
return v.visit (this);
}
}
interface ListVisitor {
public A visit (NIL m);
public A visit (CONS m);
}