modified:   visitor.clj