lang/reader.rkt
#lang s-exp syntax/module-reader
#:language read
#:read -read
#:read-syntax -read-syntax

(require racket/unit
         "../read-sig.rkt"
         "../sweet.rkt")

(define-unit underlying-read@
  (import)
  (export (rename read^ [-read read]))

  (define -read read))

(define-values/invoke-unit
  (compound-unit
    (import)
    (export S)

    (link [((R : read^)) underlying-read@]
          [((S : read^)) sweet@ R]))

  (import)
  (export (prefix - read^)))

(define (-read-syntax src in)
  (define datum (-read in))
  (if (eof-object? datum)
      eof
      (datum->syntax #f datum)))