On Sat, Jan 15, 2011 at 11:29 AM, Stevie Strickland
<[email protected]> wrote:
> On Jan 15, 2011, at 12:26 PM, Stevie Strickland wrote:
>> On Jan 15, 2011, at 12:19 PM, Robby Findler wrote:
>>> I think that we are just throwing up stumbling blocks. It is really a
>>> design choice (does a reprovide "carry over" the contract or does it
>>> put a new one on there?) and I seriously doubt there are any places
>>> where someone does a reprovide intending to change the contract in
>>> this manner. To the contrary, I expect that nearly every place where
>>> someone does a reprovide, they indented to use the exact same contract
>>> (with different parties now).
>>
>> This is possible, but _which_ parties?  Do you wish to export internals 
>> through an external interface that should now take on the positive blame, so 
>> that you don't leak your internals (via module names and such used as blame 
>> parties)?  This seems to me what you'd want for something like redex, but 
>> this requires more work, since you need to change the positive blame.  This 
>> would require reapplying the contract projection to the original 
>> (pre-wrapped) value but different blame parties, which is more expensive and 
>> thus should be explicit, or some thought into how to engineer the contract 
>> system to make this possible without needing to reapply the projection.
>
> Actually, if this is only allowed before the value is used (i.e. on straight 
> reprovides of a contracted identifier), then we might be able to store some 
> syntax-time information and recreate the syntax transformer appropriately.  
> So perhaps it wouldn't be as expensive as I originally thought, though it 
> still seems that changing the positive blame information should be an 
> explicit operation, and I think it's really what you want here.  I'll keep 
> thinking about this, though.

Oh, good point! That would solve both of Carl's objections, I believe.

But I don't think we should think of it as 'changing the positive
blame information' -- I agree anything phrased like that sounds wrong.

Instead, I think we should be thinking "what is (provide f) shorthand
for?". In the past I argued it was shorthand for "(provide/contract [f
any/c])" but now I think that maybe we should be thinking of it as
"(provide/contract [f
<the-contract-f-was-imported-with-or-any/c-if-there-wasn't-one>])".

Does that make more sense?

Robby
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Reply via email to