diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/parametric.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/parametric.rkt index 3fd44de1..07f09497 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/parametric.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/parametric.rkt @@ -52,4 +52,5 @@ #'(parametric-combinator (list body) vars)])) (define-terminal-sc parametric-var/sc (id) #:impersonator + #:printer (v p mode) (display (syntax-e (parametric-var/sc-id v)) p) id) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/terminal.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/terminal.rkt index 0b01c9fb..66969c6a 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/terminal.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/terminal.rkt @@ -18,14 +18,23 @@ (define-syntax-class kind-keyword [pattern #:flat #:with sym 'flat] [pattern #:chaperone #:with sym 'chaperone] - [pattern #:impersonator #:with sym 'impersonator])) + [pattern #:impersonator #:with sym 'impersonator]) + + (define-splicing-syntax-class printer + [pattern (~seq #:printer (v p mode) body) + #:with (methods ...) #'(#:methods gen:custom-write [(define (write-proc v p mode) body)])] + [pattern (~seq) + #:with (methods ...) #'()]) + + ) (define-syntax (define-terminal-sc stx) (syntax-parse stx - [(_ name:id (args:id ...) kind:kind-keyword body:expr) + [(_ name:id (args:id ...) kind:kind-keyword p:printer body:expr) #'(struct name static-contract (args ...) #:transparent + p.methods ... #:methods gen:sc [(define (sc-map v f) v) (define (sc-traverse v f) (void))