I'd like to write a sequence syntax that uses `match'-style pattern matching. Unfortunately, this doesn't seem to be currently possible, but it's close.
First, something like this is ruled straight out: (for/list ([(? (lambda (x) #t) x) (:match (list 1 2 3))]) x) since (lambda (x) #t) is not an identifier. This is ruled out *before* the `:match' expander is given control. Second, it's not possible to distinguish between the client writing this: (for/list ([x (:match e)]) ...) and this: (for/list ([(x) (:match e)]) ...) which, while they have the same semantics for `in-list', would have very different semantics for `:match'. I think the easiest solution would be to (1) accept any pattern in the binding position, and have individual sequence-syntax forms rule them out (perhaps `define-sequence-syntax' could make this easy), and (2) provide a lower-level form which is given the raw pattern, without any transformation. I'll write up a patch, provided anyone is interested. -- sam th samth at ccs.neu.edu
