package nl.utwente.viskell.haskell.expr;
import java.util.ArrayList;
import java.util.List;
/** A binder that decompose a data constructor into a list of subbinders. */
public class ConstructorBinder extends Binder {
/** The data constructor name. */
private final String constructor;
/** A list of Binders for each constructor element */
private final List<Binder> binders;
public ConstructorBinder(String constr, List<Binder> binders) {
super("none", null);
this.binders = binders;
this.constructor = constr;
}
public ConstructorBinder(String constr) {
super("none", null);
this.binders = new ArrayList<>();
this.constructor = constr;
}
@Override
public String getUniqueName() {
return binders.stream().map(Binder::getUniqueName).reduce(constructor, (str, bname) -> str+" "+bname);
}
}