private IValue traverseADTOnce(IValue subject, CaseBlockList casesOrRules,
DIRECTION direction, PROGRESS progress, FIXEDPOINT fixedpoint, TraverseResult tr) {
IConstructor cons = (IConstructor)subject;
Map<String, IValue> kwParams = null;
if (cons.mayHaveKeywordParameters() && cons.asWithKeywordParameters().hasParameters()) {
kwParams = new HashMap<>();
}
if (cons.arity() == 0 && kwParams == null) {
return subject; // constants have no children to traverse into
}