[plt-scheme] (provide ...) question
How would I do that? It looks like if I use
(provide/contract (struct city-line) ...)
there's no way to except the make-city-line constructor, and
with-contract doesn't have a struct version, so I'm afraid I'd have to
provide explicit contracts for every function the define-struct
creates.
Sorry if I'm being dense,
Todd
On Tue, May 18, 2010 at 10:11 AM, Matthias Felleisen
<matthias at ccs.neu.edu> wrote:
>
> I think this is a (known) bug in define-struct/contract.
>
> Also consider exporting a contracted structure instead of defining a struct
> with a contract. Slightly different meanings but the former appears to be
> what you want.
>
>
> On May 18, 2010, at 10:03 AM, Todd O'Bryan wrote:
>
>> Whoops. I tried to simplify the example, and simplified it to the
>> point where it works. It seems that the problem is actually when I try
>> to use define-struct/contract:
>>
>> #lang scheme
>> (provide (except-out (struct-out city-line)
>> make-city-line)
>> (rename-out [better-make-city-line make-city-line]))
>>
>> (define-struct/contract city-line
>> ([city string?]
>> [state #px"[A-Z]{2}"]
>> [zip #px"\\d{5}"]
>> [zip+4 #px"\\d{4}"]))
>>
>> (define better-make-city-line
>> (case-lambda
>> [(city state zip zip+4)
>> (make-city-line city state zip zip+4)]
>> [(city state zip)
>> (make-city-line city state zip "")]))
>>
>> causes the error:
>>
>> except-out: identifier to remove `make-city-line' not included in
>> nested provide spec in: (struct-out city-line)
>>
>> Sorry for not checking my example!
>> Todd
>>
>> On Tue, May 18, 2010 at 9:43 AM, Matthias Felleisen
>> <matthias at ccs.neu.edu> wrote:
>>>
>>> In what way doesn't this do "it"?
>>>
>>>
>>> On May 18, 2010, at 8:44 AM, Todd O'Bryan wrote:
>>>
>>>> I have a struct that I'd like to provide from a module, but I'd like
>>>> to provide a different constructor to modules that require it. Here's
>>>> a simple example:
>>>>
>>>> (define-struct city-line (city state zip zip+4))
>>>>
>>>> (define better-make-city-line
>>>> (case-lambda
>>>> [(city state zip zip+4)
>>>> (make-city-line city state zip zip+4)]
>>>> [(city state zip)
>>>> (make-city-line city state zip "")]))
>>>>
>>>> I tried this:
>>>>
>>>> (provide (except-out (struct-out city-line)
>>>> make-city-line)
>>>> (rename-out [better-make-city-line make-city-line]))
>>>>
>>>> but that doesn't seem to do it.
>>>>
>>>> Is there a way to do such a thing? Am I close?
>>>>
>>>> Thanks,
>>>> Todd
>>>> _________________________________________________
>>>> For list-related administrative tasks:
>>>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>>
>>>
>
>