I believe that run time will be the most plausible use case. I may write macros that refer to struct-procedure names at macro-writing time, but I don't expect to invoke the struct procedures at macro-expansion time. My primary issue is "discoverability:" how can I find out the interface of any struct?
On Thursday, October 28, 2021 at 1:00:15 PM UTC-7 [email protected] wrote: > Are you intending to use the struct procedure names at compile time (such > as in a macro) or runtime? > > On Tuesday, October 26, 2021 at 5:02:46 PM UTC-7 [email protected] wrote: > >> I understand why structs are opaque, by default, but I want to discover >> the public interface of some struct type, that is, a list of the procedures >> defined by the struct. >> >> Here is an example. Suppose I want to find out all the procedures defined >> on an instance of the syntax struct >> >> #'42 >> >> Dr. Racket shows an expander clicky that shows some formatted information >> inside the instance : >> >> [image: Screenshot from 2021-10-26 16-51-37.png] >> >> Uncapitializing the names in the display reveals the interface: >> >> (syntax-position #'42) ~~> 790 >> (syntax-span #'42) ~~> 2 >> (syntax-original? #'42) ~~> #t >> >> etc. >> >> I want to discover those procedure names in my racket program, not >> manually by visually inspecting graphics in Dr Racket. >> >> I found this trick for structs that I define: >> >> #lang racket >> (require (for-syntax racket/struct-info)) >> (require racket/pretty) >> >> (struct foo (a b)) >> (begin-for-syntax >> (displayln >> (extract-struct-info >> (syntax-local-value >> #'foo)))) >> >> ~~> >> >> [image: Screenshot from 2021-10-26 16-59-19.png] >> >> but it doesn't work for the syntax type >> >> (begin-for-syntax >> (displayln >> (extract-struct-info >> (syntax-local-value >> #'syntax)))) >> >> ~~> >> >> [image: Screenshot from 2021-10-26 17-00-33.png] >> >> I'd be grateful for advice and an example of how to get the interface of >> "syntax" without Dr Racket and without grovelling docs. >> > -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/8e4ca03e-e276-4c42-a662-4fcf7c994387n%40googlegroups.com.

