Regardless of whether or not skip is the right name for elide (it feels like it may be), I'm continuing to be bothered by the likes of:
>> uparse "a" [x: skip]
>> x
== #a ; how was that "skipped"?
>> uparse [1] [x: skip]
>> x
== 1 ; how was that "skipped?"
skipping just doesn't seem like it should be "value-bearing". And the Haskell uses skip for the meaning you would think of not gathering the data.
What we want is more along the shade of meaning of ACCEPT. TAKE is a good short word, but it suggests mutation.
My suggestion that TAG! or otherwise might be an instruction makes <?> which might look better than ?:
>> uparse [1] [x: ?] ; seems thin
>> x
== 1
>> uparse [1] [x: <?>] ; a little more "heft"
>> x
== 1
Actually, you could put it in its own block if you wanted to, and it should work the same:
>> uparse [1] [x: [?]] ; slower/costlier but could be optimized
>> x
== 1
The asterisk isn't terrible, and it may be silly to avoid it on the basis of its usual "match many things" meaning. COMMA! can make it easier to see how it plugs into the rules:
>> uparse [1 2] [x: *, y: *]
>> x
== 1
>> uparse [1 2] [x: [*], y: [*]]
>> x
== 1
Right now *
seems probably like the best of the ASCII offerings. And at least one other person who has thought about it has decided on it, so, that's one vote from someone not present.
I'm going to switch SKIP to * for now and we can see how it feels.