Move define/match
to racket/match
original commit: df594d3b3bd6924b80942323803385964e9a708b
This commit is contained in:
parent
9170637137
commit
22cc8bc458
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user