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,,,

Reply via email to