I mentioned that the @ types were slated for use for matching the contents of a variable exactly. The most frequent example I have given is:
>> block: [some "a"]
>> uparse [[some "a"] [some "a"]] [some @block]
== [some "a"] ; success gives result of last matching rule
So that's different than [some block], which would treat block as a rule.
Works with all types:
>> num: 1
>> uparse [1 1 1] [some @num]
== 1
I didn't mention things like @(gr o up) but those work too:
>> uparse [1 1 1] [some @(3 - 2)]
== 1
I realized I actually do not know how to write the above two cases in Red or Rebol2. You can't use the number as a plain variable in Red, since it acts as a repeat rule (UPARSE prohibits that, since it's a rule that takes an argument, you must use REPEAT for such behavior)
red>> num: 1
red>> parse [1 1 1] [some num]
*** Script Error: PARSE - invalid rule or usage of rule: 1
Also in Red, I'm not clear on why the following isn't an error, since the GROUP! product is just discarded:
red>> parse [1 1 1] [some (3 - 2)]
== false
This is something that would work in R3-Alpha, but doesn't in Red or Rebol2:
red>> parse [1 1 1] [some quote (3 - 2)]
== false
Your guess is as good as mine. Whatever the answer in their world is, it's not obvious. But I think the @ types give a clean answer in UPARSE.
But What About @[bl o ck] ?
We might say that it means match a block literally:
>> uparse [[some "a"] [some "a"]] [some @[some "a"]]
== [some "a"]
That would be wasteful, since we already have a way to match blocks literally by quoting them:
>> uparse [[some "a"] [some "a"]] [some '[some "a"]]
== [some "a"]
But UPARSE has changed the game for why @[...] and [...] can mean different things...because block rules synthesize values. And who's to say you might not want to match a rule and use its product as the literal thing to match against?
>> uparse [1 1 1 2] [@[some '10, (10 + 10) | some '1 (1 + 1)]]
== 2
In other words your rule can match and provide an answer for the thing to match next. We have zero experience with how often that might be useful, but maybe it is?