I hope so! That's what I understood option B to mean.

I could adjust the define-message macro according to the info in Ryan and 
Phillip's attachments, but I'm not well-educated on trapping struct operations. 
Phillip: Your example and email gives me the impression that when you add a 
chaperone, you can proxy all struct operations, including the gap left by the 
chaperone for the constructor. Is that true?

The macro I'd want has to preserve all characteristics of all generated struct 
bindings, which makes things tricky since the options for `struct` normally 
operate on a strict subset. e.g. #:[extra-]constructor-name seems to operate on 
the constructor alone, and the #:extra- variant does not preserve the 
match-expander/super-id characteristics. #:constructor-name is closer, but the 
original constructor id is no longer directly callable by the declaring module.

On 5/10/21 7:05 AM, Hendrik Boom wrote:

> On Sun, May 09, 2021 at 10:23:34PM +0000, Sage Gerard wrote:
>
>> I have a project with 57 prefab structure types. I need to construct 
>> instances using a local contract (module level contracts do not fit my needs 
>> here). Since I cannot define guards, the solution is easy enough.
>>
>> (struct foo (num) #:prefab)
>> (define/contract make-foo (-> real? foo?) foo)
>>
>> Problem: I already have a few hundred constructor calls without
>> contracts. I could either A) rewrite them all to use contracted
>> constructors, or B) attach local contracts in a sweet spot so that I
>> don't have to rewrite anything else.
>
> Is there any chance you could do the "rewriting" in a macro so you
> wouldn't actually have to change the few hundred constructor calls
> when you use option A)?
>
> -- hendrik
>
>> I prefer option B, but it doesn't look like I can attach a local contract to 
>> a constructor with `struct` alone, or even with an impersonator. When I hack 
>> around to rebind or hide the constructor's identifier, I break compatibility 
>> with `match` and `defstruct*`.
>>
>> If you were in my position, what would you do?
>>
>> --
>>
>> ~slg
>>
>> --
>> 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
>> racket-users+unsubscr...@googlegroups.com
>> .
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/racket-users/0a16cfbe-4789-a939-796e-5f6f9da21626%40sagegerard.com
>> .
>
> --
> 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
> racket-users+unsubscr...@googlegroups.com
> .
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/20210510110509.cpg6jnil6th7xbsi%40topoi.pooq.com
> .

--
~slg

-- 
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 racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/94e81fc9-e8a1-e677-bf0e-b49e597313b9%40sagegerard.com.

Reply via email to