Without actually `require`-ing syntax-parse, could syntax-rules and syntax-case simply report this one special case differently? If the specific not-expression is the exact syntax `_`, then report not-an-expression (as usual) but also add the p.s. "Are you trying to use syntax-parse? ...."
Maybe bonus points for doing this only if `_` is nested inside a syntax-rule or syntax-case form. But just bonus points. Even simply, whenever the syntax is `_`. After all, the main error message is still "not an expression". It's just adding a p.s. suggestion. Maybe this is excessively practical (to borrow a phrase I think I heard Jay use at lunch today) but this is a really common mistake. Not only have I forgotten to (require (for-syntax syntax/parse)). I've even managed to remember it... but get it wrong as (require (for-syntax syntax-parse)) [hyphen not slash]. p.s. I'm amused that `_` is also a good emoticon for how I look when I've made this mistake and stare at the error message: `_` On Wed, Sep 25, 2013 at 7:59 AM, Sam Tobin-Hochstadt <sa...@cs.indiana.edu> wrote: > On Wed, Sep 25, 2013 at 2:14 AM, Konrad Hinsen > <konrad.hin...@fastmail.net> wrote: >> >> > Maybe making the error message more specific like "Did you forget to >> (require >> > (for-syntax syntax/parse)) ?" ? Or is it too specific? >> >> It would already help a lot if the error message said something about >> syntax-parse being undefined. But it complains about the pattern, >> which is kind of strange. It looks like syntax-parse is already there >> but incomplete. > > The reason it complains about the pattern is that `_` is already bound > -- `syntax-rules` and `syntax-case` both work at phase 0 without any > new requires. So Racket interprets everything as function application > until it gets to the `_`, which it tries to expand and gives an error > because it's not supposed to be used as an expression. Of course, you > didn't mean it as an expression, but as part of a `syntax-parse` > pattern, but because `syntax-parse` wasn't bound, it didn't get > recognized as a pattern. > > I think the error message could be better about making this clearer, > but I can't think of a good way that doesn't build-in `syntax/parse`. > > Sam > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users