generic-syntax-expanders/private/define-expanders.scrbl
2016-08-15 03:06:12 +02:00

29 lines
1.2 KiB
Racket

#lang scribble/manual
@(require "doc-util.rkt")
@title{Defining Generic Syntax Expanders}
This module provides a high-level API for creating generic
expanders for use with other macros.
@defform[(define-expander-type id)]{
Creates an expander type and binds several derived values
for working with the expander type:
@itemlist[
@item{@code{id-expander-type} - a new unique @racket[expander-type?]
bound at phase level 1}
@item{@code{make-id-expander} - a procedure bound at phase level 1
that accepts a transformer procedure and returns an @racket[expander?]
with @code{id-expander-type}}
@item{@code{id-expander?} - a predicate bound at phase level 1
recognizing expanders produced by @code{make-id-expander}}
@item{@code{define-id-expander} - a syntactic form at phase level
0 that takes an identifier and a transformer procedure and binds the
identifier as a @code{id-expander?} for use in a transformer
environment}
@item{@code{expand-all-id-expanders} - a procedure bound at phase
@; TODO: expand-all-expanders-of-type is not documented
level 1 that's equivalent to @racket[expand-all-expanders-of-type] with
the @code{id-expander-type} as the type argument}
]}