You got it.
> On Apr 15, 2015, at 10:19 PM, Alexander D. Knauth <[email protected]> > wrote: > > >> On Apr 15, 2015, at 10:12 PM, Jon Zeppieri <[email protected]> wrote: >> >> On Wed, Apr 15, 2015 at 9:35 PM, Alexander D. Knauth >> <[email protected]> wrote: >>> >>>> On Apr 15, 2015, at 2:29 PM, Jon Zeppieri <[email protected]> wrote: >>>> >>>> I'm trying to provide a struct, the struct type of which uses >>>> prop:procedure and prop:match-expander, and I'd like the procedure to >>>> have a contract. >>>> >>>> If I simply (provide <identifier>) >>> >>> Is this identifier the constructor function, or an instance of this struct? >>> If it’s the constructor function, then couldn’t you use (provide >>> (contract-out [struct id ([field contract] …)])) for that? >>> If it’s an instance, then are you doing something different to define it as >>> a transformer binding? >> >> It's an instance of a struct. Here's the background: I have a struct >> type, created with `struct`, which has its own constructor and match >> expander. However, I don't want to use that constructor or match >> expander as part of the public interface. (The struct contains some >> fields that should be treated as private.) Now, the only way I know to >> provide a single identifier that can act as both a struct constructor >> and a match expander is to use a struct. So, in this case, I need to >> use a *different* struct type, an instance of which can be used, on >> one hand, as a procedure to construct an instance of the original >> struct type, and on the other, as a match expander (also for the >> original struct type). > > So If I understand correctly what you’re doing, you have a normal struct A, > at “runtime” with a transformer binding like normal structs have. > Then you have a compile-time struct B, which has prop:procedure and > prop:match-expander, where you want an instance of B to be the right-hand > side of a (define-syntax <identifier> (B ….))? Is that correct? And the > prop:procedure in B will expand to something like (A ….), and the > prop:match-expander in B will expand to (A ….) as a match pattern? Or am I > misunderstanding what you’re trying to do? > > -- 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]. For more options, visit https://groups.google.com/d/optout.

