But I don't see how the same binding can be a transformer and also return something else (like a list, or a checked-struct-info-thing) via syntax-local-value.
If I bind my-fn as a transformer, then any other macros that use it with syntax-local-value will receive the transformer procedure back, not any special meta data. And if I bind it as meta data directly, ie (define-syntax my-fn 'something) then it works with syntax-local-value but any attempts to use it as a transformer result in illegal syntax. Even if I create a transformer that returns a struct which implements both prop:procedure and prop:struct-info, using that binding with syntax-local-value will return the transformer procedure itself, rather than the final struct. On Sun, Jan 19, 2014 at 8:04 PM, Carl Eastlund <carl.eastl...@gmail.com>wrote: > Yes, I believe that the name of a structure defined by "struct" is bound > at syntax-time to a value that implements both prop:procedure, so that it > can expand to a use of the constructor when used in an expression, and > prop:struct-info so that it can be use to look up static information when > passed to relevant macros. > > Carl Eastlund > > > On Sun, Jan 19, 2014 at 11:00 PM, Scott Klarenbach <sc...@pointyhat.ca>wrote: > >> How is it that the definition of (struct my-name (x y)) can bind >> *my-name* both as a #<procedure:my-name> at runtime and a >> transformer-binding *my-name* that at compile time (via >> syntax-local-value) produces #<procedure:self-ctor-checked-struct-info>.? >> >> Or, put another way, how can I define a transformer *my-fn* that >> produces syntax, but that also exposes hidden meta-data under the same >> binding to other macros that might wish to know about the binding at >> compile time? >> >> I'm specifically wondering how the overloading works. Is it some clever >> use of prop:procedure? >> >> Thanks. >> >> -- >> Talk to you soon, >> >> Scott Klarenbach >> >> PointyHat Software Corp. >> www.pointyhat.ca >> p 604-568-4280 >> e sc...@pointyhat.ca >> 200-1575 W. Georgia >> Vancouver, BC V6G2V3 >> >> _______________________________________ >> To iterate is human; to recur, divine >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users >> >> > -- Talk to you soon, Scott Klarenbach PointyHat Software Corp. www.pointyhat.ca p 604-568-4280 e sc...@pointyhat.ca 200-1575 W. Georgia Vancouver, BC V6G2V3 _______________________________________ To iterate is human; to recur, divine
____________________ Racket Users list: http://lists.racket-lang.org/users