[plt-scheme] Custom match expanders for eq?, eqv? and equal?
Hi PLTers,
I've often thought an equivalent of "eq?" or "equal?" to be a useful
addition for the match library. "?" does more or less what I want but
it's a little verbose:
(define x 'a)
(define y 'b)
(match x
[(? (cut eq? <> y)) "X is the same as Y."])
What I'd like to see is something like this:
(match x
[(eq? y) "X is the same as Y."])
I had a play this afternoon and wrote the a module called "my-
match.ss" (attached) that redefines eq?, eqv? and equal? to do what
I've described above:
#lang scheme
(require (file "my-match.ss"))
; and so on...
Now for my question. By supplying my own versions of these
identifiers, I have also changed how they are treated in an expression
context (although the end result of using them should be the same). Is
it a "Bad Thing" (TM) to do this to identifiers that are so
fundamental to the core of Scheme? Should I rename these guys, or make
sure I only ever require them with a prefix?
Many thanks,
-- Dave
; my-match.ss ====================================
#lang scheme
(require srfi/26)
; Match expanders --------------------------------
; (_ expr pattern ...)
(define-match-expander match:eq?
(syntax-rules ()
[(_ value pattern ...)
(? (cut eq? <> value) pattern ...)])
eq?)
; (_ expr pattern ...)
(define-match-expander match:eqv?
(syntax-rules ()
[(_ value pattern ...)
(? (cut eqv? <> value) pattern ...)])
eqv?)
; (_ expr pattern ...)
(define-match-expander match:equal?
(syntax-rules ()
[(_ value pattern ...)
(? (cut equal? <> value) pattern ...)])
equal?)
; Provide statements -----------------------------
(provide (rename-out [match:eq? eq?]
[match:eqv? eqv?]
[match:equal? equal?]))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20080819/d02835ee/attachment.html>