<div dir="ltr">On Wed, Sep 25, 2013 at 7:59 AM, Sam Tobin-Hochstadt <span dir="ltr"><<a href="mailto:samth@cs.indiana.edu" target="_blank">samth@cs.indiana.edu</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, Sep 25, 2013 at 2:14 AM, Konrad Hinsen<br>
<<a href="mailto:konrad.hinsen@fastmail.net">konrad.hinsen@fastmail.net</a>> wrote:<br>
><br>
>  > Maybe making the error message more specific like "Did you forget to (require<br>
>  > (for-syntax syntax/parse)) ?" ? Or is it too specific?<br>
><br>
> It would already help a lot if the error message said something about<br>
> syntax-parse being undefined. But it complains about the pattern,<br>
> which is kind of strange. It looks like syntax-parse is already there<br>
> but incomplete.<br>
<br>
</div>The reason it complains about the pattern is that `_` is already bound<br>
-- `syntax-rules` and `syntax-case` both work at phase 0 without any<br>
new requires. So Racket interprets everything as function application<br>
until it gets to the `_`, which it tries to expand and gives an error<br>
because it's not supposed to be used as an expression.  Of course, you<br>
didn't mean it as an expression, but as part of a `syntax-parse`<br>
pattern, but because `syntax-parse` wasn't bound, it didn't get<br>
recognized as a pattern.<br>
<br>
I think the error message could be better about making this clearer,<br>
but I can't think of a good way that doesn't build-in `syntax/parse`.<br>
<span class="HOEnZb"><font color="#888888"><br>
Sam</font></span><br></blockquote><br></div><div class="gmail_quote">What I don't understand is why the implicit `#%app` added in front of `syntax-parse` doesn't blow up when it tries to expand its first argument -- the name `syntax-parse` -- and a use of `#%top` shows up.  I thought `#%top` was supposed to blow up inside a module.  If it blew up here, we'd see an error about the name `syntax-parse` before `#%app` ever got around to expanding the clauses with `_` in them.  Somehow that error is being delayed, and the clauses are being treated as expressions as if the name `syntax-parse` had successfully expanded into an expression that might produce a function.  If we can just make `#%top` cause a syntax error sooner here, we'll get intelligent error messages.<br>

<br></div><div class="gmail_quote">--Carl<br></div></div></div>