Add custom printer for terminal contracts.
This commit is contained in:
parent
497a7faa83
commit
bb74b55f67
|
@ -52,4 +52,5 @@
|
||||||
#'(parametric-combinator (list body) vars)]))
|
#'(parametric-combinator (list body) vars)]))
|
||||||
|
|
||||||
(define-terminal-sc parametric-var/sc (id) #:impersonator
|
(define-terminal-sc parametric-var/sc (id) #:impersonator
|
||||||
|
#:printer (v p mode) (display (syntax-e (parametric-var/sc-id v)) p)
|
||||||
id)
|
id)
|
||||||
|
|
|
@ -18,14 +18,23 @@
|
||||||
(define-syntax-class kind-keyword
|
(define-syntax-class kind-keyword
|
||||||
[pattern #:flat #:with sym 'flat]
|
[pattern #:flat #:with sym 'flat]
|
||||||
[pattern #:chaperone #:with sym 'chaperone]
|
[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)
|
(define-syntax (define-terminal-sc stx)
|
||||||
(syntax-parse 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 ...)
|
#'(struct name static-contract (args ...)
|
||||||
#:transparent
|
#:transparent
|
||||||
|
p.methods ...
|
||||||
#:methods gen:sc
|
#:methods gen:sc
|
||||||
[(define (sc-map v f) v)
|
[(define (sc-map v f) v)
|
||||||
(define (sc-traverse v f) (void))
|
(define (sc-traverse v f) (void))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user