Template Macros are a new Racket library that dramatically simplifies the
generation of meta-program code.
Template macros infiltrate the spaces underserved by Racket’s existing
pattern-based and procedural macros, such as the insides of literal data,
or in the various quoted forms;
 
  
   
    |  | 
   
    | #<syntax:eval:73:16 (0 1 2 3 4 5 6 7 8 9)> | 
 
and when one template macro is used by another, the results are spliced in
place automatically.
Template macros eliminate common technical barriers to advanced Racket
meta-programming techniques by preempting the default macro expander. The
current API offers a lot more than I could jam into a release announcement,
and it’s still evolving!
In the coming weeks and months, I’ll try to post some topic-focused tutorials
that highlight the wealth of functionality template macros provide to the
practicing language-oriented Racket programmer.
But the next time you trip on a missing syntax-local-introduce,
or find yourself facing a wall of format-ids,
 
  
   
    |  | 
   
    | > id5 | 
   
    | 
      
       
        | '((vector 1 0 0 0 0) |  
        |   (vector 0 1 0 0 0) |  
        |   (vector 0 0 1 0 0) |  
        |   (vector 0 0 0 1 0) |  
        |   (vector 0 0 0 0 1)) |  | 
 
or struggle to interleave a medley of
functions with “syntax” in their names,
 
  
   
    |  | 
   
    | > (hyphen-define* (foo bar baz) (v) (* 2 v)) | 
   
    | > (foo-bar-baz 50) | 
   
    | 100 | 
 
give template macros a try and let me know how it goes!