public abstract void Call(PredVisitor visitor); // visitor pattern
public override void Call(PredVisitor visitor) { visitor.Visit(this); }
public override void Call(PredVisitor visitor) { throw new NotImplementedException(); }