default void visit(Consumer<Expression> fn) {
    fn.accept(this);
    switch (this) {
      case Not(var child) -> child.visit(fn);
      case Or(var children) -> children.forEach(child -> child.visit(fn));
      case And(var children) -> children.forEach(child -> child.visit(fn));
      default -> {
        // already called fn, and no nested children
      }
    }
  }
Calls {@code fn} for every expression within the current one.
planetiler-core/src/main/java/com/onthegomap/planetiler/expression/Expression.java