Avoid calling back into Haskell to traverse the AST