Move define/match to racket/match

original commit: df594d3b3bd6924b80942323803385964e9a708b
This commit is contained in:
Asumu Takikawa 2012-10-14 14:09:41 -04:00 committed by Stephen Chang
parent 9170637137
commit 22cc8bc458

View File

@ -3,8 +3,7 @@
(require racket/class
racket/match
(for-syntax racket/base)
(for-syntax syntax/parse
syntax/parse/experimental/template))
(for-syntax syntax/parse))
(provide match? as object)
@ -15,38 +14,6 @@
(syntax-rules ()
[(as ([x e] ...) p ...) (and (app (lambda (y) e) x) ... p ...)]))
;; Added by asumu
;; Comprehensive `define` procedure form for match
(provide define/match)
(begin-for-syntax
(define-syntax-class function-header
(pattern ((~or header:function-header name:id) . args:args)
#:attr params
(template ((?@ . (?? header.params ()))
. args.params))))
(define-syntax-class args
(pattern (arg:arg ...)
#:attr params #'(arg.name ...))
(pattern (arg:arg ... . rest:id)
#:attr params #'(arg.name ... rest)))
(define-splicing-syntax-class arg
#:attributes (name)
(pattern name:id)
(pattern [name:id default])
(pattern (~seq kw:keyword name:id))
(pattern (~seq kw:keyword [name:id default]))))
(define-syntax (define/match stx)
(syntax-parse stx
[(_ ?header:function-header ?clause ...)
(template
(define ?header
(match* (?? ?header.params)
?clause ...)))]))
;; Added by asumu
;; Match expander for objects from racket/class
(define-match-expander object