[racket] Structs and syntax-local-value ... how is the struct name overloaded?

From: Carl Eastlund (carl.eastlund at gmail.com)
Date: Sun Jan 19 23:04:26 EST 2014

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 <scott at 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 scott at 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140119/223506b4/attachment-0001.html>

Posted on the users mailing list.