[racket-dev] syntax property duplication

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Thu Aug 18 08:14:16 EDT 2011

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



Posted on the dev mailing list.