On Sep 6, 2009, at 8:16 AM, Eduardo Cavazos wrote:
Of course, I like portable code so the next step would be to talk to
other implementors about it, see if we can develop a defacto standard,
This is a fine step. An interface that caters to existing
implementations might be something like:
(define-syntax-value id <expr>)
(define-syntax id
(make-inspecting-transformer
(lambda (stx rho)
body)))
In Ikarus or any psyntax-based implementation, it could be implemented
as:
(library (syntax value)
(export define-syntax-value make-inspecting-transformer)
(import (rnrs) (only (ikarus) make-compile-time-value))
(define-syntax define-syntax-value
(syntax-rules ()
[(_ id expr)
(define-syntax id (make-compile-time-value expr))]))
(define make-inspecting-transformer
(lambda (proc)
(lambda (stx)
(lambda (rho)
(proc stx rho))))))
In PLT, it would look something like:
(library (syntax value private)
(export make-compile-time-value make-inspecting-transformer)
(import (rnrs) (only (scheme base???) syntax-local-value))
(define-record-type compile-time-value (fields value))
(define make-inspecting-transformer
(lambda (proc)
(lambda (stx)
(proc stx
(lambda (id)
(let ([v (syntax-local-value id)])
(and (compile-time-value? v)
(compile-time-value-value v)))))))))
(library (syntax value)
(export define-syntax-value make-inspecting-transformer)
(import (rnrs) (for (syntax value private) expand))
(define-syntax define-syntax-value
(syntax-rules ()
[(_ id expr)
(define-syntax id (make-compile-time-value expr))])))
go SRFIng, and then standardize it.
Here, I think you should save your effort and work on something else
instead. :-)
Aziz,,,