[racket] How ought I run the annotate function in gui-debugger/annotator on a datum?

From: John Clements (clements at brinckerhoff.org)
Date: Tue Jan 21 00:20:41 EST 2014

On Jan 20, 2014, at 4:40 PM, Patrick Boe wrote:

> Thanks for taking a look, John.  Here's a reduced version.  I don't think there's any missing namespace information here at the time of evaluation, since the syntax is being manipulated in a macro, but I am relatively new to using namespace anchors, so I could be wrong. It seems to me like the syntax is being expanded either more or less fully than the annotator wants.
> 
> #lang racket
> (require (for-syntax racket/format gui-debugger/annotator))
> (define-syntax fail-to-annotate
>   (lambda (stx)
>     (let-values
>       ([(annotated _)
>         (annotate-stx (expand (cadr (syntax-e stx))) '_ '_ '_ )])
>       annotated)))
> (fail-to-annotate (string-append "hi" "lo"))

Right... I would say "less." In particular, it appears to me that the syntax here is not fully expanded. 

However, this code is also setting off my "border-crossing" alarms. I've been working with the racket syntax since... 1997? ... and so it embarrasses me not to be able to give you a more definitive answer, but I think that, to make a long story short, you don't want to put calls to annotate-stx inside a macro.  Instead, I think you probably want to implement your debugger the way the debugger does---as a global transformation on fully-expanded syntax. 

Put differently: doing it this way looks to me like it's straining the built-in structure of the macro system. You can probably move it toward what you want, but it's probably not ever going to work really nicely.

Sorry for not giving you a more definitive answer,

John Clements


> 
> 
> 
> On Mon, Jan 20, 2014 at 2:18 AM, John Clements <clements at brinckerhoff.org> wrote:
> 
> On Jan 16, 2014, at 4:05 PM, Patrick Boe wrote:
> 
> > I am trying to learn how to use the DrRacket debugger's annotate function. My ultimate aim is to build a REPL that you can execute from within a closure and have access to everything that's in scope. (see my StackOverflow question on that topic and Greg Hendershott's well-researched answer) For the time being, I'm just trying to explore how the annotate function works. You can see my first exploratory attempt at using it, and the results, here.
> >
> > The error, which is happing inside of the annotator, seems to arise when it tries to pattern-match he application of string-append. The matcher is looking for a #%plain-app and the expanded syntax I'm presenting to it contains an #%app. I'm unsure if I should be expanding the syntax differently so it comes out as a #%plain-app or if there's something else I'm doing wrong to produce the syntax I'm feeding into the annotator. Does anybody see where my error is?
> 
> Sadly, I don't have a browser right now, so I can't take a look at your links. Perhaps you can reduce it to a ten-line example? Could the solution have something to do with namespace anchors?
> 
> John Clements
> 
> >
> > I originally posted this question to SO, but Greg suggested I might have more luck with it here.
> >
> > Best,
> > Patrick
> >
> > PS - if you're reading this, thanks the great PLAI class last year, SK!
> > ____________________
> >  Racket Users list:
> >  http://lists.racket-lang.org/users
> 
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users



Posted on the users mailing list.