code: def generic_type_name(v):
      
      if isinstance(v, AstExampleRef):
          return "reference"
      elif isinstance(v, numbers.Integral):
          # Must come before real numbers check since integrals are reals too
          return 'integer'
      elif isinstance(v, numbers.Real):
          return 'float'
      elif isinstance(v, (tuple, list)):
          return 'list'
      elif isinstance(v, six.string_types):
          return 'string'
      elif v is None:
          return 'null'
      else:
          return type(v).__name__
docs: Return a descriptive type name that isn't Python specific. For example, an
      int type will return 'integer' rather than 'int'.