Fwd: Unexpected results with impersonators and make-keyword-procedure

28 views
Skip to first unread message

Scott Moore

unread,
Mar 8, 2015, 2:08:35 PM3/8/15
to d...@racket-lang.org
It occurs to me that this might be a better question for racket-dev, so I'm forwarding it here.

Thanks,
Scott

---------- Forwarded message ----------
From: Scott Moore <sdm...@fas.harvard.edu>
Date: Fri, Mar 6, 2015 at 8:04 PM
Subject: Unexpected results with impersonators and make-keyword-procedure
To: Racket Users <us...@racket-lang.org>


Hi,

I've run into some strange behavior with the interaction between impersonators and make-keyword-procedure. I expect that when not invoked with keywords, the result of make-keyword-procedure and a lambda with the same form should be equivalent. Instead, they behave differently when impersonated. I have included a small module that demonstrates the issue below. I expect that the two checks at the bottom should succeed.

Thanks,
Scott

#lang racket

(require rackunit)

(define-values (prop:my-prop my-prop? my-prop-accessor)
  (make-impersonator-property 'my-prop))

(define (mark-with-my-prop val)
  (impersonate-procedure
   val
   #f
   prop:my-prop
   #t))

(define (mark-fun-mkp f)
  (mark-with-my-prop
   (make-keyword-procedure 
    (λ (kwds kwd-args . other-args)
      (keyword-apply f kwds kwd-args other-args))
    (λ args
      (apply f args)))))

(define (mark-fun-lambda f)
  (mark-with-my-prop
   (λ args
     (apply f args))))

(define (dummy-impersonator val)
  (make-keyword-procedure
   (λ (kwds kwd-args . other-args)
     (apply values kwd-args other-args))
   (λ args
     (apply values args))))

(define marked-mkp (mark-fun-mkp display))
(define marked-lambda (mark-fun-lambda display))

(check-eq? (my-prop? marked-lambda) (my-prop? marked-mkp))
(check-eq? (my-prop? (impersonate-procedure marked-lambda (dummy-impersonator marked-lambda)))
           (my-prop? (impersonate-procedure marked-mkp (dummy-impersonator marked-mkp))))

Reply all
Reply to author
Forward
0 new messages