AST walker

Since you are accepting a `cls` argument, isn't it more appropriate to be calling `cls.map(p.list)`?