1. I like your final solution! But no reason why either of ours couldn't be done in vanilla arc.
2. (whenlet var expr ...) could also be written:
(let var expr
(when var ...))
So I don't think letwhen is strictly necessary.
3. Another alternative formulation is:
(let var expr :when (f var)
...)
All that's really saving us is a couple of parens compared to the original pattern. Maybe we don't need a macro, just a different indentation convention:
(let var expr (when (f var)
...))
But both these make the conditional nature of the block harder to see. My original solution and yours don't have that drawback.