I like the idea of being able to specify the type of an input up front, but I don't like the specific notation proposed, because those bracketing punctuation characters are things users want to use as text, and I don't want them to have to backslash them or anything like that.
At one point in our history, you couldn't name a block
INCREASE SIZE BY ( ) %
because that percent at the end would make an input slot with a null name. We fixed that pretty quickly, but it required special-casing a percent sign not immediately followed by an alphameric.
I get that this is what Snapblocks does, but not all users know about Snapblocks.
For those reasons, I think a better syntax is to follow the input's name with the same punctuation character that users already know from the type hint notation in the Block Editor:
%anyType
%number#
%list:
%Boolean?
For variadic inputs, "..." after that punctuation, so
%anyVariadic...
%numberVariadic#...
%listVariadic:...
%BooleanVariadic?...
I think we should display typed variadic input hints that way, too.
Procedure-type inputs are a little trickier because users outside Greece don't have lambdas on their keyboards, and users in Greece have to be able to distinguish an input name that naturally ends in ℓ (i.e., λ) from a procedure-type input. One thing we could do is follow the old Lisp convention of using \ to mean λ (because it sort of looks like a lambda), but that would confuse people accustomed from other languages to think \ quotes the following character. We could use \\ for lambda, I guess. Or we could use &, which is also kinda lambda-shaped. I propose that last one.
To distinguish among types of procedure inputs, we could use a character after the ampersand. For that purpose we could even use letters, because after an ampersand there's no ambiguity.
%reporter&
%predicate&?
%inlineCommand&u (mnemonic for the tab at the bottom)
%cShaped&c
%anyUnevaluated&-
%BooleanUnevaluated&?- (also accept &-?)
And of course variadic versions of all those,
%anyUnevaluatedVariadic&-...
and so on.
I'm pretty sure we could accept any rearrangement of type modifiers after an input name, e.g.,
%BooleanUnevaluatedVariadic-?...&
except that letters can't come first, so no
%cShapedc&
(Note that this proposal uses letters only for their shape, not to abbreviate a type name such as %n for numeric, so there's no issue about internationalization.)
Not saying we're going to do this any time soon, or at all, but if we do, we should imho do it this way.