class_docstr: A functional visitor over Type.
  
  The default behavior recursively traverses the AST
  and reconstructs the AST.
code: def visit_func_type(self, ft):
      new_arg_types = [
          self.visit(arg_type) for arg_type in ft.arg_types
      ]
      new_ret_type = self.visit(ft.ret_type)
      new_type_params = [
          self.visit(type_param)
          for type_param in getattr(ft, "type_params", [])
      ]
      new_type_constraints = [
          self.visit(type_constraint)
          for type_constraint in getattr(ft, "type_constraints", [])
      ]
      return FuncType(
          new_arg_types,
          new_ret_type,
          new_type_params,
          new_type_constraints,
      )
  
imports: from .ty import TypeVar, IncompleteType, TensorType, FuncType, TupleType, TypeRelation, RefType, GlobalTypeVar, TypeCall
  from .adt import TypeData
label_desc: Use image node_id 4 for calling the TypeMutator obj's underlying member method code with example usage: obj.visit_func_type(ft) and returns: FuncType