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