Remove description of old API
This commit is contained in:
parent
2664d38733
commit
48e934a314
29
README.md
29
README.md
|
@ -2,32 +2,3 @@ generic-syntax-expanders
|
||||||
========================
|
========================
|
||||||
|
|
||||||
A Racket package for creating macros with built-in support for defining sub-macros within them, similar to match expanders
|
A Racket package for creating macros with built-in support for defining sub-macros within them, similar to match expanders
|
||||||
|
|
||||||
Sometimes complex Racket macros need ways to extend their syntax. For example, in the `match` form new patterns can be created for `match` using `define-match-expander`. This package provides a form for defining a macro with the ability to define expanders for that macro. Consider this contrived example:
|
|
||||||
|
|
||||||
(define-syntax call-each
|
|
||||||
(syntax-parser
|
|
||||||
[(_ f (expr ...))
|
|
||||||
#'(begin (f expr) ...)]))
|
|
||||||
|
|
||||||
(call-each displayln (1 2 3))
|
|
||||||
|
|
||||||
If a user of this macro wished for a way to specify a range of numbers as the arguments, the user must define their own version of `call-each` with support for ranges that expands to using the original call-each. However, this package provides a form, `define-syntax-with-expanders`:
|
|
||||||
|
|
||||||
(require generic-syntax-expanders)
|
|
||||||
|
|
||||||
(define-syntax-with-expanders call-each
|
|
||||||
(syntax-parser
|
|
||||||
[(_ f (expr ...))
|
|
||||||
#'(begin (f expr) ... )]))
|
|
||||||
|
|
||||||
(define-call-each-expander foo
|
|
||||||
(syntax-parser
|
|
||||||
[(_ low:number high:number)
|
|
||||||
#`(#,@(range (syntax-e #'low) (syntax-e #'high)))]))
|
|
||||||
|
|
||||||
(call-each displayln (foo 1 4))
|
|
||||||
|
|
||||||
The `define-syntax-with-expanders` form creates a `define-call-each-expander` form, which defines syntax transformers that are only used inside the body of a `call-each` form and expand before `call-each` does.
|
|
||||||
|
|
||||||
You can install this package with `raco package install generic-syntax-expanders`.
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user