Maybe what I'm looking for is a different operator, which might try to integrate into parse.
Typically what this is called is "destructuring", where there are patterns you match and when they match you grab the information out of it.
I had a proposal in progress for something like that, in the vein of making SWITCH more like Rust's MATCH
>> destructure [a b] [
[word!] => [print "Case one"]
[word! word!] => [print "Case two"]
]
Case two
There were some other concepts, like using ellipsis to mean "anything after here", and also labeling variables:
>> block: [1020 a 304 <any> #other "items"]
>> destructure block [
x: [integer!] y: [integer!]
[x 'a y ...] => [print ["Both ints" x y]]
]
Both ints 1020 304
If DESTRUCTURE (or something like it) were also a UPARSE keyword then maybe that would be the place to get the "try all alternates" from, vs. trying to shoehorn it into some variant behavior of |