unit.ss
(module unit mzscheme
  ;(require-for-syntax (lib "unit-exptime.ss"))
  (require (lib "unit.ss"))

  (define-syntax (new-unit stx)
    (syntax-case stx ()
      [(new-unit sig [export-name binding] ...)
       (with-syntax ([(tmp ...) (generate-temporaries (syntax->list #'(export-name ...)))])
         #'(let ([tmp binding] ...)
             (unit
               (import)
               (export sig)
               (define export-name binding) ...)))]))

  (define-syntax functor
    (syntax-rules ()
      [(functor formals (sig-ids ...) link-specs ...)
       (lambda formals
         (compound-unit
           (import)
           (export sig-ids ...)
           (link link-specs ...)))]))

  (define-syntax require-unit
    (syntax-rules ()
      [(_ (sigs ...) expr)
       (define-values/invoke-unit expr
         (import)
         (export sigs ...))]
      [(_ sig expr)
       (require-unit (sig) expr)]))

  (provide (all-defined)))