pretty printers for AST are implemented as traits