Use function-header library in racket/match.
This commit is contained in:
parent
ca365d17c1
commit
2e9065e610
|
@ -6,7 +6,8 @@
|
|||
unstable/sequence
|
||||
syntax/parse
|
||||
syntax/parse/experimental/template
|
||||
racket/lazy-require))
|
||||
racket/lazy-require
|
||||
syntax/parse/lib/function-header))
|
||||
|
||||
(begin-for-syntax
|
||||
(lazy-require [racket/match/patterns (bound-vars)]
|
||||
|
@ -14,27 +15,6 @@
|
|||
|
||||
(provide define-forms)
|
||||
|
||||
;; syntax classes for `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-rule (define-forms parse-id
|
||||
match match* match-lambda match-lambda*
|
||||
match-lambda** match-let match-let*
|
||||
|
|
Loading…
Reference in New Issue
Block a user