def resolve_method name:, default_type: nil
    name_string = name.to_s # .gsub( /\A\@\@/, '.' ).gsub( /\A\@/, '#' )
    
    case name_string
    when Meta::Names::Method::Bare
      bare_name = Meta::Names::Method::Bare.new name_string
      
      case default_type&.to_sym
      when nil
        raise NRSER::ArgumentError.new \
          "When `default_type:` param is `nil` `name:` must start with '.'",
          "or '#'",
          name: name
          
      when :singleton, :class
        method bare_name
        
      when :instance
        instance_method bare_name
        
      else
        raise NRSER::ArgumentError.new \
          "`default_type:` param must be `nil`, `:instance`, `:singleton` or",
          "`:class`, found", default_type.inspect,
          name: name,
          default_type: default_type
        
      end
    
    when Meta::Names::Method::Singleton
      method Meta::Names::Method::Singleton.new( name_string ).bare_name
    
    when Meta::Names::Method::Instance
      instance_method Meta::Names::Method::Instance.new( name_string ).bare_name
    
    else
      raise NRSER::ArgumentError.new \
        "`name:` does not look like a method name:", name.inspect
    end 
  end
def resolve_method name:, default_type: nil
    name_string = name.to_s # .gsub( /\A\@\@/, '.' ).gsub( /\A\@/, '#' )
    
    case name_string
    when Meta::Names::Method::Bare
      bare_name = Meta::Names::Method::Bare.new name_string
      
      case default_type&.to_sym
      when nil
        raise NRSER::ArgumentError.new \
          "When `default_type:` param is `nil` `name:` must start with '.'",
          "or '#'",
          name: name
          
      when :singleton, :class
        method bare_name
        
      when :instance
        instance_method bare_name
        
      else
        raise NRSER::ArgumentError.new \
          "`default_type:` param must be `nil`, `:instance`, `:singleton` or",
          "`:class`, found", default_type.inspect,
          name: name,
          default_type: default_type
        
      end
    
    when Meta::Names::Method::Singleton
      method Meta::Names::Method::Singleton.new( name_string ).bare_name
    
    when Meta::Names::Method::Instance
      instance_method Meta::Names::Method::Instance.new( name_string ).bare_name
    
    else
      raise NRSER::ArgumentError.new \
        "`name:` does not look like a method name:", name.inspect
    end 
  end
Resolve a method name to a reference object.

 @param [#to_s] name
   The method name, preferably prefixed with `.` or `#` to indicate if it's
   a singleton or class method.

 @param [nil | :singleton | :class | :instance | #to_sym ] default_type
   Identifies singleton/instance methods when the name doesn't.

   `:singleton` and `:class` mean the same thing.

   Tries to convert values to symbols before matching them.

   If `nil`, `name:` **MUST** identify the method type by prefix.

 @return [ ::Method | ::UnboundMethod ]
   The method object.

 @raise [NRSER::ArgumentError]