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. 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