racket/collects/unstable/match.rkt
2010-06-06 20:29:55 -04:00

21 lines
442 B
Racket

#lang racket/base
(require racket/match (for-syntax racket/base))
(provide == match? as)
(define-match-expander
==
(lambda (stx)
(syntax-case stx ()
[(_ val comp)
#'(? (lambda (x) (comp val x)))]
[(_ val) #'(== val equal?)])))
(define-syntax-rule (match? e p ...)
(match e [p #t] ... [_ #f]))
(define-match-expander as
(syntax-rules ()
[(as ([x e] ...) p ...) (and (app (lambda (y) e) x) ... p ...)]))