[racket-users] Re: how can I approximate syntax properties with `make-rename-transformer`?

2017-11-29 Thread Matthew Butterick
Seems like this works well enough, where I approximate the 
rename-transformer rather than the syntax property.

(define-syntax (mb stx)
 (syntax-case stx ()
   [(_ . args) (with-syntax ([args (syntax-property #'args 'key 
'value)])
 #'(other-module-begin . args))]))



On Tuesday, November 28, 2017 at 9:05:07 PM UTC-8, Jack Firth wrote:
>
> What about passing the configuration data to `other-module-begin` via 
> keyword arguments or tagged expressions in the body of the 
> `(other-module-begin ...)` expansion? Is there a particular reason `mb` and 
> `other-module-begin` need to communicate with syntax properties?
>
> On Tuesday, November 28, 2017 at 7:15:50 PM UTC-8, Matthew Butterick wrote:
>>
>> I'm making a #%module-begin macro, but I want to delegate it to an 
>> existing one. 
>>
>> OK, let's start with a rename transformer: 
>>
>> (provide (rename-out [mb #%module-begin])) 
>> (define-syntax mb (make-rename-transformer #'other-module-begin)) 
>> (define-syntax other-module-begin (λ (stx) #'foo)) 
>>
>> That works, but I also need to pass some extra data to 
>> `other-module-begin` that controls how it's configured during this 
>> delegation. 
>>
>> OK, let's add a syntax property. But wrapping the property around the 
>> transformer doesn't work, because a rename transformer is not `syntax?`: 
>>
>> (provide (rename-out [mb #%module-begin])) 
>> (define-syntax mb (syntax-property (make-rename-transformer 
>> #'other-module-begin) 'foo "bar")) 
>> (define-syntax other-module-begin (λ (stx) #'foo)) 
>>
>> ;; syntax-property: contract violation 
>>
>>
>> I can wrap the property around the target identifier, but the syntax 
>> property doesn't stick: 
>>
>> (provide (rename-out [mb #%module-begin])) 
>> (define-syntax mb (make-rename-transformer (syntax-property 
>> #'other-module-begin 'foo "bar"))) 
>> (define-syntax other-module-begin (λ (stx) #'foo)) 
>>
>> (syntax-property #'mb 'foo) ; #f 
>>
>>
>> Other possibilities with equivalent effect?
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[racket-users] Re: how can I approximate syntax properties with `make-rename-transformer`?

2017-11-28 Thread Jack Firth
What about passing the configuration data to `other-module-begin` via 
keyword arguments or tagged expressions in the body of the 
`(other-module-begin ...)` expansion? Is there a particular reason `mb` and 
`other-module-begin` need to communicate with syntax properties?

On Tuesday, November 28, 2017 at 7:15:50 PM UTC-8, Matthew Butterick wrote:
>
> I'm making a #%module-begin macro, but I want to delegate it to an 
> existing one. 
>
> OK, let's start with a rename transformer: 
>
> (provide (rename-out [mb #%module-begin])) 
> (define-syntax mb (make-rename-transformer #'other-module-begin)) 
> (define-syntax other-module-begin (λ (stx) #'foo)) 
>
> That works, but I also need to pass some extra data to 
> `other-module-begin` that controls how it's configured during this 
> delegation. 
>
> OK, let's add a syntax property. But wrapping the property around the 
> transformer doesn't work, because a rename transformer is not `syntax?`: 
>
> (provide (rename-out [mb #%module-begin])) 
> (define-syntax mb (syntax-property (make-rename-transformer 
> #'other-module-begin) 'foo "bar")) 
> (define-syntax other-module-begin (λ (stx) #'foo)) 
>
> ;; syntax-property: contract violation 
>
>
> I can wrap the property around the target identifier, but the syntax 
> property doesn't stick: 
>
> (provide (rename-out [mb #%module-begin])) 
> (define-syntax mb (make-rename-transformer (syntax-property 
> #'other-module-begin 'foo "bar"))) 
> (define-syntax other-module-begin (λ (stx) #'foo)) 
>
> (syntax-property #'mb 'foo) ; #f 
>
>
> Other possibilities with equivalent effect?

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.