AST traversal classes
To use these classes, inherit from them and override the methods corresponding to the
types from Parsetree you want to process. For instance to collect all the string
constants in a structure:
      let string_constants_of = object
        inherit [string list] Ast_traverse.fold as super
        method! expression e acc =
          let acc = super#expression e acc in
          match e.pexp_desc with
          | Pexp_constant (Const_string (s, _)) -> s :: acc
          | _ -> acc
        method! pattern p acc =
          let acc = super#pattern p acc in
          match p.ppat_desc with
          | Ppat_constant (Const_string (s, _)) -> s :: acc
          | _ -> acc
      end
      let string_constants_of_structure = string_constants_of#structureclass map : object ... endclass iter : object ... endclass 'acc fold : object ... endclass 'acc fold_map : object ... endclass 'ctx map_with_context : object ... endclass map_with_path : Ppx_core__.Import.string map_with_contextclass virtual 'res lift : object ... endclass sexp_of : object ... endval sexp_of : sexp_of