[racket] confusing error with keywords

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Wed Nov 17 16:31:53 EST 2010

So far, I'm with Carl on this one.

But perhaps you can explain what the bigger problem is? I will easily
admit that I fall into this trap of seeing only the small problem.


On Wed, Nov 17, 2010 at 3:25 PM, Carl Eastlund <cce at ccs.neu.edu> wrote:
> It's not clear to me that this is a symptom, or that you have
> identified the right fundamental problem.  Function application is
> another syntax -- I don't just mean we implement it as one, it is one.
>  We allow it to vary with language just like any other macro.  The
> issue here is that part of #%app's interface is that its first
> argument must be a valid expression, and we want it to report problems
> with that before problems with the rest of its arguments.  I think
> this really is a shallow problem.
> Carl Eastlund
> On Wed, Nov 17, 2010 at 4:19 PM, Matthias Felleisen
> <matthias at ccs.neu.edu> 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
>>> <matthias at 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

Posted on the users mailing list.