[racket-dev] src-id in identifier-binding for same-module definitions

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Wed Jul 16 04:34:45 EDT 2014

That `posn1.1` is a unreadable symbol that stands for the symbol
`posn1` plus some marks that distinguish it.

In other words, `posn1.1` bridges (in an ugly way) the symbol-based
world of module environments and the identifier-based world of syntax.
In the future, I hope to shift module environments to be
identifier-based to avoid these unreadable symbols.

At Tue, 15 Jul 2014 09:10:26 -0400, Sam Tobin-Hochstadt wrote:
> If you take this program and fully-expand it in the macro stepper:
> 
> #lang racket
> (struct posn (x y))
> (define p1 (posn 1 2))
> 
> You see that the residual program has an application of the `posn1`
> function, which is the hidden constructor. And indeed, the
> fully-expanded program has a definition of `posn1`. However, if you
> click on the use of `posn1`, the macro stepper will tell you that it's
> defined in this module as `posn1.1`, and provided as `posn1.1` as
> well. If you write program to grovel through the fully-expanded
> syntax, you get these same results as the `src-id` and
> `nominal-src-id` from `identifier-binding`.
> 
> Why is this? And is there a way to get from `posn1.1` to `posn1` reliably?
> 
> Sam

Posted on the dev mailing list.