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