On 03/20/2012 12:08 PM, Neil Van Dyke wrote:
In the below example, can file "library.rkt" be changed (without
splitting it up into two files), so that file "program.rkt" works
without change? Is using "racket/load" the only way to keep
"library.rkt" to one file like this?

Basically, you just need to make sure that my-syntax-util is defined in both phase 0 and phase 1. You could put it in a module that you require twice, but that's roughly equivalent to just defining it twice, once at phase 0 and once at phase 1 using `begin-for-syntax':

#lang racket/base

(require (for-syntax racket/base))

(define-syntax begin-both
  (syntax-rules ()
    ((_ e ...)
     (begin
       (begin-for-syntax e ...)
       e ...))))

(begin-both
  (define (my-syntax-util stx)
;; Pretend that "my-syntax-util" performs some big complicated processing,
    ;; which is useful both in the implementation of "my-own-syntax" and
    ;; also directly by users of this library.
    (quasisyntax/loc stx
      (cons 'my-syntax-util-was-here #,stx))))

(define-syntax (my-own-syntax stx)
  (syntax-case stx ()
    ((_ CONDITION VAL)
     (quasisyntax/loc stx
       (if CONDITION
           #,(my-syntax-util (syntax VAL))
           VAL)))))

(provide my-own-syntax
         my-syntax-util)


--
Brian Mastenbrook
br...@mastenbrook.net
http://brian.mastenbrook.net/

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to