[racket-dev] syntax property duplication
On Wed, Aug 17, 2011 at 6:25 PM, Sam Tobin-Hochstadt <samth at ccs.neu.edu> wrote:
> The following idiom duplicates the syntax properties on `stx':
>
> (define-syntax (m stx) (datum->syntax #'here 'id stx stx))
>
> This is a problem for me because I use syntax properties to indicate
> polymorphic type instantiation. If an expression that's actually a
> macro using this idiom is instatiated, then Typed Racket tries to do
> the type instantiation twice, resulting in an error. See the below
> program, which fails.
>
> Should I expect that duplicate syntax properties are a natural result
> of expansion, and find some way to handle them? Or is there something
> else that should happen?
>
> #lang typed/racket
> (: id : (All (A) (A -> A)))
> (define (id x) x)
> (define-syntax (m stx) (datum->syntax #'here 'id stx stx))
> (inst m Integer)
>
> --
> sam th
> samth at ccs.neu.edu
Merging syntax properties -- duplicating in this case, since the
macro's input and output have the same properties -- are a natural
result of expansion, as you say. See the third paragraph in the
reference on syntax properties:
http://docs.racket-lang.org/reference/stxprops.html
I think you need to find some way to handle them.
--Carl