change `define-type' to use #:reflection-name instead of prop:custom-write

This commit is contained in:
Matthew Flatt 2010-08-18 15:47:57 -06:00
parent dafb9de74c
commit e99c53eee8
2 changed files with 24 additions and 8 deletions

View File

@ -143,14 +143,7 @@
#:transparent #:transparent
#:omit-define-syntaxes #:omit-define-syntaxes
#:mutable #:mutable
#:property #:reflection-name 'variant)
prop:custom-write
(lambda (v port write?)
((if write? write display)
(list 'variant
(variant-field v)
...)
port)))
... ...
(define variant? (define variant?
(flat-named-contract 'variant? variant*?)) (flat-named-contract 'variant? variant*?))

View File

@ -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)))")