Use function-header library in racket/match.

This commit is contained in:
Leif Andersen 2014-09-29 22:55:13 -04:00 committed by Ryan Culpepper
parent ca365d17c1
commit 2e9065e610

View File

@ -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*