sviperll / adt4j

adt4j - Algebraic Data Types for Java
BSD 3-Clause "New" or "Revised" License
143 stars 8 forks source link

Allow to define wrapper class to use with generated class #35

Closed sviperll closed 8 years ago

sviperll commented 8 years ago

Allow something like this:

@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());