diff --git a/collects/plai/datatype.rkt b/collects/plai/datatype.rkt index f5cc2933ac..4e17d8cc53 100644 --- a/collects/plai/datatype.rkt +++ b/collects/plai/datatype.rkt @@ -143,14 +143,7 @@ #:transparent #:omit-define-syntaxes #:mutable - #:property - prop:custom-write - (lambda (v port write?) - ((if write? write display) - (list 'variant - (variant-field v) - ...) - port))) + #:reflection-name 'variant) ... (define variant? (flat-named-contract 'variant? variant*?)) diff --git a/collects/tests/plai/printer.rkt b/collects/tests/plai/printer.rkt new file mode 100644 index 0000000000..3b3a9254a1 --- /dev/null +++ b/collects/tests/plai/printer.rkt @@ -0,0 +1,23 @@ +#lang racket/base +(require (only-in plai define-type) + racket/contract) + +(define-type Foo + [bar (v any/c) + (v2 any/c)]) + +(define (to-string print v) + (let ([s (open-output-string)]) + (print v s) + (get-output-string s))) + +(define (check a b) + (unless (equal? a b) (error 'check "failed: ~s vs. ~s" a b))) + +(check (to-string print (bar "a" 'b)) "(bar \"a\" 'b)") +(check (to-string write (bar "a" 'b)) "#(struct:bar \"a\" b)") +(check (to-string display (bar "a" 'b)) "#(struct:bar a b)") + +(check (to-string print (list (bar "a" (list 'b)))) "(list (bar \"a\" '(b)))") +(check (to-string write (list (bar "a" (list 'b)))) "(#(struct:bar \"a\" (b)))") +(check (to-string display (list (bar "a" (list 'b)))) "(#(struct:bar a (b)))")