[racket-dev] syntax parsing: must be a nice pattern-y way to do this

From: Ryan Culpepper (ryan at cs.utah.edu)
Date: Mon Sep 17 14:27:26 EDT 2012

On 09/17/2012 02:20 PM, John Clements wrote:
>
> On Sep 16, 2012, at 5:48 PM, Ryan Culpepper wrote:
>
>> See 'define-template-metafunction' in syntax/parse/experimental/template. Remember to change the relevant occurrences of 'syntax' to 'template'.
>
> Neat!
>
> I'm guessing, though, that I probably shouldn't release planet packages that depend on experimental-mumble…

I think it's fine if you're prepared to update the package when it 
changes. If I do remove syntax/parse/experimental/template, I'll mark it 
as deprecated for a release cycle or two first.

Ryan


>> On 09/16/2012 08:31 PM, John Clements wrote:
>>> I want to apply a transformation to a nested pattern element.
>>>
>>> To start with, suppose I have a (kind of useless) with-handlers that looks like this:
>>>
>>> (with-syntax
>>>           ([((arg ...) ...)
>>>             #`((clause.input ...) ...)])
>>>         et-cetera)
>>>
>>> That is, I've basically just renamed "clause.input" to "arg".
>>>
>>> But now, I want to perform some transformation on the elements. I'd like to write this:
>>>
>>> (with-syntax
>>>           ([((arg ...) ...)
>>>             #`((#,(transform #'clause.input) ...) ...)])
>>>         et-cetera)
>>>
>>> .. but this fails, with the error "new-style-signals.rkt:42:30: syntax: missing ellipsis with pattern variable in template in: clause.input"
>>>
>>> I can certainly work around this, by abandoning the pattern-matching slickness and just using a bunch of syntax->lists, but it seems like there must be a nicer way. Am I missing some nifty trick?
>>>
>>> John
>>>
>>>
>>>
>>>
>>> _________________________
>>>    Racket Developers list:
>>>    http://lists.racket-lang.org/dev
>>>
>>
>


Posted on the dev mailing list.