[racket-dev] syntax-local-inferred-name, keyword functions, and syntax properties
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 <samth at 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
> <samth at 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
> > <robby at 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 <
> samth at 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
> >>
> >>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20131209/3b9b7dc3/attachment.html>