Last night while falling asleep I was thinking about this more and came to some conclusions. When you put an argument into a command, it is either a literal (in parens) or a name (no parens). You can also use a named parameter from the outer block using #, but that just uses whatever the type already is, either name or literal. So the main thing is that when we create an argument, it resolves to a parameter which can be either literal or name.