@GenerateValueClassForVisitor(className="ListBase", wrapperClass=List.class)
@Visitor(resultVariableName="R")
interface ListVisitor<T, R> {
R nil();
R cons(T head, List<T> tail); // Here List is a newly generated class
}
class List<T> extends ListBase<T> {
List(ListBase<T> value) {
super(value);
}
}
so that you don't need any special ceremony to create List instances:
List<String> list = List.cons("AAA", List.<String>nil());
Allow something like this:
so that you don't need any special ceremony to create List instances: