fix define-type for PLAI beginner (but plain old define is still a problem)
svn: r791
This commit is contained in:
parent
bc105baff0
commit
3eeac2cf66
|
@ -30,7 +30,7 @@
|
||||||
;; For beginner, `define-type' requires predicates for
|
;; For beginner, `define-type' requires predicates for
|
||||||
;; contracts, and it doesn't define contracts
|
;; contracts, and it doesn't define contracts
|
||||||
(define-syntax (beginner-define-type stx)
|
(define-syntax (beginner-define-type stx)
|
||||||
(syntax-case stx (represented-as)
|
(syntax-case stx ()
|
||||||
[(_ name (variant (field predicate) ...) ...)
|
[(_ name (variant (field predicate) ...) ...)
|
||||||
(let ([name #'name])
|
(let ([name #'name])
|
||||||
(unless (identifier? name)
|
(unless (identifier? name)
|
||||||
|
@ -64,8 +64,12 @@
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_ (id ...) expr)
|
[(_ (id ...) expr)
|
||||||
(with-syntax ([(alt-id ...) (generate-temporaries #'(id ...))])
|
(with-syntax ([(alt-id ...) (generate-temporaries #'(id ...))])
|
||||||
#'(begin
|
(with-syntax ([top-level-hack (if (eq? 'top-level (syntax-local-context))
|
||||||
(define-values (alt-id ...) expr)
|
#'(define-syntaxes (alt-id ...) (values))
|
||||||
(define-primitive id alt-id) ...))]))
|
#'(begin))])
|
||||||
|
#'(begin
|
||||||
|
top-level-hack
|
||||||
|
(define-primitive id alt-id) ...
|
||||||
|
(define-values (alt-id ...) expr))))]))
|
||||||
|
|
||||||
(define-type-case beginner-type-case plai-else))
|
(define-type-case beginner-type-case plai-else))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user