modular/expansion/syntax-indirection.scm
(module syntax-indirection mzscheme

  (require "syntax-errors.scm")

  (provide make-syntax-indirection
           read-syntax-indirection)

  (define (make-syntax-indirection value)
    (case-lambda
      [(use) (raise-syntax-error #f "cannot use as an expression" use)]
      [() value]))

  (define (read-syntax-indirection id)
    (unless (identifier? id)
      (syntax-error id "syntax indirection must be an identifier"))
    (#%app (syntax-local-value id)))

  )