Syntax errors are a problem because there is no fixed syntax. 

(And I am sorry I don't have the energy to explain this problem the umpteeth 
time.) 


On Nov 17, 2010, at 5:23 PM, Ryan Culpepper wrote:

> Syntax has dependencies. In (X . ARGS), the interpretation of ARGS depends on 
> X. So X should be validated* before ARGS is interpreted. Most macros either 
> obey this principle automatically or have relatively benign violations**, but 
> #%app is a bit special.
> 
> I agree with Carl.
> 
> Ryan
> 
> * Probably X doesn't need to be fully validated, just enough to justify the 
> decisions based on it.
> 
> ** Here's a benign violation:
> 
>  (rwhen body condition) => (when condition body)
> 
> If both body and condition contain syntax errors, the error in condition is 
> reported first, surprisingly. A slightly better way to write the macro would 
> be this:
> 
>  (rwhen body condition) => (let ([c (lambda () condition)])
>                              (when (c) body))
> 
> Expansion happens in the expected order, and the compiler can fix up the code 
> afterwards.
> 
> 
> On 11/17/2010 02:19 PM, Matthias Felleisen wrote:
>> 
>> That's a fix for the symptom, and it occurred to me too.
>> Let's try to look at the large picture, too, instead of
>> just looking for bandaids for symptoms.
>> 
>> 
>> On Nov 17, 2010, at 4:17 PM, Carl Eastlund wrote:
>> 
>>> Personally I would like to see the error here be that
>>> define-struct/contract is not bound.  If the order of either top level
>>> expansion or #%app worked slightly differently, we could get that
>>> error first and all would be clear.
>>> 
>>> Carl Eastlund
>>> 
>>> On Wed, Nov 17, 2010 at 4:15 PM, Matthias Felleisen
>>> <matth...@ccs.neu.edu>  wrote:
>>>> 
>>>> Isn't the true problem that we pretend uniformity of syntax and values? In 
>>>> this case, we specifically pretend that functions and syntaxes may consume 
>>>> the same kind of keyword-labeled arguments. Except that when you make a 
>>>> small mistake, the brittleness of this arrangement shows up and you get 
>>>> WEIRD ERROR MESSAGES.
>>>> 
>>>> When systems work, nobody cares how they work. It's errors that make 
>>>> people notice, and errors happen all the time.
>>>> 
>>>> 
>>>> 
>>>> On Nov 17, 2010, at 3:55 PM, Jon Rafkind wrote:
>>>> 
>>>>> I found this error message confusing. The problem is I forgot to require
>>>>> racket/contract.
>>>>> 
>>>>> #lang racket/base
>>>>> 
>>>>> (define-struct/contract foo ([a any/c]) #:transparent)
>>>>> 
>>>>>> 
>>>>> application: missing argument expression after keyword at: #:transparent
>>>>> in: (#%app define-struct/contract foo ((a any/c)) #:transparent)
>>>>> 
>>>>> I was confused because I thought I had a (require racket/contract)
>>>>> somewhere but apparently I didn't. I don't know if anything at all can
>>>>> be done about it..
>> 
>> _________________________________________________
>>   For list-related administrative tasks:
>>   http://lists.racket-lang.org/listinfo/users
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/users

_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to