<p dir="ltr">If you look in the Typed Racket implementation, you'll see lots phase-1 only uses of syntax-parse.</p>
<p dir="ltr">Sam</p>
<div class="gmail_quote">On Sep 24, 2013 3:21 PM, "Nick Sivo" <<a href="mailto:nicksivo@gmail.com">nicksivo@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Why doesn't syntax/parse just provide everything at phases 0 and 1<br>
like the module 'sp below:<br>
<br>
(module sp racket/base<br>
  (require syntax/parse<br>
           (for-syntax syntax/parse))<br>
  (provide (all-from-out syntax/parse)<br>
           (for-syntax (all-from-out syntax/parse))))<br>
<br>
(require 'sp)<br>
<br>
(define-syntax (mylet stx)<br>
  (syntax-parse stx<br>
                [(_ ([var-id rhs-expr] ...) body ...+)<br>
                 #'((lambda (var-id ...) body ...) rhs-expr ...)]))<br>
<br>
I've not done as much Racket programming as many of you, but I've yet<br>
to want syntax/parse in only phase 0.<br>
<br>
-Nick<br>
<br>
On Tue, Sep 24, 2013 at 10:21 AM, Laurent <<a href="mailto:laurent.orseau@gmail.com">laurent.orseau@gmail.com</a>> wrote:<br>
> This is a quite common pitfall into which I have myself fallen a few times,<br>
> and I guess it's not the last time.<br>
><br>
> How much work would be required to prevent people from falling into it ever<br>
> again?<br>
> Maybe saying so in the docs at the right place wouldn't hurt, but people may<br>
> still miss it.<br>
> Maybe making the error message more specific like "Did you forget to<br>
> (require (for-syntax syntax/parse)) ?" ? Or is it too specific?<br>
> Or pushing the idea further (and requiring more work, obviously), Racket's<br>
> errors could propose a list of packages where the unknown identifier can be<br>
> found, along with the require phase? Is xref able to do that currently?<br>
><br>
> Laurent<br>
><br>
><br>
><br>
> On Tue, Sep 24, 2013 at 6:20 PM, Stephen Chang <<a href="mailto:stchang@ccs.neu.edu">stchang@ccs.neu.edu</a>> wrote:<br>
>><br>
>> You need (require (for-syntax syntax/parse)) because you are using it<br>
>> inside a define-syntax.<br>
>><br>
>> On Sep 24, 2013 11:56 AM, "Konrad Hinsen" <<a href="mailto:konrad.hinsen@fastmail.net">konrad.hinsen@fastmail.net</a>><br>
>> wrote:<br>
>>><br>
>>> Hi everyone,<br>
>>><br>
>>> I am trying to learn about syntax-parse, starting with the introduction<br>
>>> of the "Syntax" documentation.<br>
>>><br>
>>> Unfortunately, the very first example given for the use of syntax-parse<br>
>>> doesn't work in my Racket installation:<br>
>>><br>
>>>    Welcome to Racket v5.90.0.9.<br>
>>>    racket@> (require syntax/parse)<br>
>>>    racket@> (define-syntax (mylet stx)<br>
>>>                 (syntax-parse stx<br>
>>>                   [(_ ([var-id rhs-expr] ...) body ...+)<br>
>>>                    #'((lambda (var-id ...) body ...) rhs-expr ...)]))<br>
>>>    stdin::277: _: wildcard not allowed as an expression<br>
>>>      in: (_ ((var-id rhs-expr) ...) body ...+)<br>
>>>      errortrace...:<br>
>>>      context...:<br>
>>>       try-next<br>
>>><br>
>>> /Users/hinsen/Development/racket/pkgs/errortrace-pkgs/errortrace-lib/errortrace/errortrace-lib.rkt:480:4<br>
>>><br>
>>> /Users/hinsen/Applications/Racket/collects/racket/private/misc.rkt:87:7<br>
>>><br>
>>> I tried replacing the wildcard by "mylet", but that only leads to another<br>
>>> error<br>
>>> message:<br>
>>><br>
>>>    racket@> (define-syntax (mylet stx)<br>
>>>                 (syntax-parse stx<br>
>>>                   [(mylet ([var-id rhs-expr] ...) body ...+)<br>
>>>                    #'((lambda (var-id ...) body ...) rhs-expr ...)]))<br>
>>>    stdin::842: ...: ellipses not allowed as an expression<br>
>>>      in: ...<br>
>>>      errortrace...:<br>
>>>      context...:<br>
>>>       try-next<br>
>>><br>
>>> /Users/hinsen/Development/racket/pkgs/errortrace-pkgs/errortrace-lib/errortrace/errortrace-lib.rkt:480:4<br>
>>><br>
>>> /Users/hinsen/Applications/Racket/collects/racket/private/misc.rkt:87:7<br>
>>><br>
>>> Am I doing something wrong here? Or are the examples obsolete?<br>
>>><br>
>>> Konrad.<br>
>>> ____________________<br>
>>>   Racket Users list:<br>
>>>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
>><br>
>><br>
>> ____________________<br>
>>   Racket Users list:<br>
>>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
>><br>
><br>
><br>
> ____________________<br>
>   Racket Users list:<br>
>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
><br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</blockquote></div>