1) Ok, but I was also considering converting examples like:
(let ((ls (list 1 2 3))) (match ls ((1 2 3) #t))) => #t
to
(let ((ls (list 1 2 3)))
(match ls
((1 2 3) #t)))
=> #t
for readability unless that's an issue.
2) Ok, I can make note of extensions to the Wright-Cartwright operators
3) I can make note of this. One of the main ways I use pattern matching right now is with procedures like:
;;;Matrix N N -> [Maybe-of N]
(define (matrix-ref mat row col)
"(matrix-ref M i j) -> Mij if i,j in range (zero-indexed), #f otherwise"
(match-let ((($ <matrix> vec stride rows) mat))
(if (or (< row 0) (>= row rows) (< col 0) (>= col stride))
#f
(u8vector-ref vec (+ (* row stride) col)))))
so I'd like record matching to be at least an optional documented interface, with as many working versions as I can get together during draft status.
The one-line examples should have the "=> foo" on the same line. It's just as easy to read and it's the usual convention in R[567]RS and other SRFIs.
There should be some mention of which pattern operators are extensions to Wright-Cartwright.
Since the $ and @ pattern operators depend on record reflection, which is not currently standardized, the text should be changed to mark them as optionally supported and therefore non-portable. Alternatively, either or both could be removed from the SRFI altogether.