On Mon, Dec 9, 2013 at 4:50 PM, Robby Findler <ro...@eecs.northwestern.edu> wrote: > I'm not really familiar with the way the keyword expansion works. I was just > trying to suggest "obvious" reasons why the code would do such a thing. > > But if you find that changing the name changes the error message, then > changing that would be bad.
The point I'm trying to make is that I think the error message is _currently bad_, because there's no reason to think of that procedure as named `foo`. We'd be better off and less confused if the procedure in the error message didn't have a name. If you think changing it would be bad, why do you think the relevant procedure (the one with a keyword named `#:kk`) should be named `foo`? Sam > > Sorry for the noise. > > Robby > > > On Mon, Dec 9, 2013 at 3:41 PM, Sam Tobin-Hochstadt <sa...@cs.indiana.edu> > wrote: >> >> Yes, that would work, but I still don't see why that's a useful name to >> use. >> >> Sam >> >> On Mon, Dec 9, 2013 at 4:37 PM, Robby Findler >> <ro...@eecs.northwestern.edu> wrote: >> > Would it work to make it use syntax-local-infer-name but only use the >> > symbolic part of that name? >> > >> > Robby >> > >> > >> > >> > On Mon, Dec 9, 2013 at 3:34 PM, Sam Tobin-Hochstadt >> > <sa...@cs.indiana.edu> >> > wrote: >> >> >> >> Aha, I found the example: >> >> >> >> (let ([foo ((lambda (#:kk x) (λ (x) x)) #:k 0)]) (foo 5)) >> >> >> >> Has this error: >> >> >> >> application: procedure does not expect an argument with given keyword >> >> procedure: foo >> >> given keyword: #:k >> >> arguments...: >> >> #:k 0 >> >> >> >> >> >> Note that if you make the keywords the same, `foo` is indeed bound to >> >> a procedure, but _not_ to the procedure referred to in the error >> >> message. >> >> >> >> Sam >> >> >> >> On Mon, Dec 9, 2013 at 4:29 PM, Sam Tobin-Hochstadt >> >> <sa...@cs.indiana.edu> wrote: >> >> > I haven't found a way to make it happen yet. But even so, it seems >> >> > like the wrong name. >> >> > >> >> > Sam >> >> > >> >> > On Mon, Dec 9, 2013 at 4:16 PM, Robby Findler >> >> > <ro...@eecs.northwestern.edu> wrote: >> >> >> Is it possible that that name can leak out in an error message? >> >> >> >> >> >> Robby >> >> >> >> >> >> >> >> >> >> >> >> On Mon, Dec 9, 2013 at 3:10 PM, Sam Tobin-Hochstadt >> >> >> <sa...@cs.indiana.edu> >> >> >> wrote: >> >> >>> >> >> >>> Currently, this program fails with a somewhat bizarre type error: >> >> >>> >> >> >>> #lang typed/racket >> >> >>> >> >> >>> (: foo ([#:k Any] -> Integer)) >> >> >>> (define (foo #:k [s #f]) 0) >> >> >>> >> >> >>> (let: ([i : Integer (foo #:k #t)]) i) >> >> >>> >> >> >>> The reason is that the expansion of keyword applications generates >> >> >>> a >> >> >>> name to use for the function (here `foo`), and it uses >> >> >>> `syntax-local-infer-name` to get the name to use. Unfortunately, in >> >> >>> this case, it produces `i`, an identifier which has an extra syntax >> >> >>> property saying that `i` is an `Integer`. Of course, `foo` isn't >> >> >>> an >> >> >>> integer, it's a function, and so we get a type error. >> >> >>> >> >> >>> I don't see why the inferred name is the right choice here -- >> >> >>> there's >> >> >>> no connection between `i` and the name of the function. I can just >> >> >>> change this to use a fresh name, but I thought I'd ask first. >> >> >>> >> >> >>> Sam >> >> >>> _________________________ >> >> >>> Racket Developers list: >> >> >>> http://lists.racket-lang.org/dev >> >> >> >> >> >> >> > >> > > > _________________________ Racket Developers list: http://lists.racket-lang.org/dev