I sent a post to the mailing list about the guarded-block
macro. I’m trying to make it more extensible but I hit some macrology issues and I’m looking for advice https://groups.google.com/g/racket-users/c/H-EppBmQ7oU/m/chEItxUGBwAJ
I suppose guard-block
is the real macro that does the work, while guard
is just a “dummy” form that guard-block
will recognize it by its binding. Is that correct?
local-expand
could work, but it looks really heavyweight. Another possibility is doing something similar to match expander (https://github.com/racket/racket/blob/master/racket/collects/racket/match/match-expander.rkt#L8)
Yup, guard
doesn’t do anything on its own, guard-block
just searches for it
I don’t really want to have to create some sort of define-guard-expander
form though
I’d rather just write regular macros with define-simple-macro
that happen to expand into guard
statements
Then, another similar macro that you might want to look into is define/private
, which expands to (private ...)
and (define ...)
.
(define ...)
is also recognized specially (just like your guard
) inside class
.
class
does seem similar
(list+ 1 (define x 2) (add1 x))
=> '(1 3)
oooo interesting
that does seem relevant
This thread may also be useful to you: https://www.mail-archive.com/racket-users@googlegroups.com/msg44445.html