[racket-dev] Blame and re-provided bindings

From: Stevie Strickland (sstrickl at ccs.neu.edu)
Date: Sat Jan 15 12:42:00 EST 2011

On Jan 15, 2011, at 12:32 PM, Robby Findler wrote:
> But I don't think we should think of it as 'changing the positive
> blame information' -- I agree anything phrased like that sounds wrong.

But I think you _do_ want this in some cases, where you're reproviding internally contracted things to an outside world, and don't want specifics of your implementation to leak.  Again, this seems to be what you'd actually want for redex, right?  You're reproviding things you've contracted internally (to make sure you are using them appropriately in your implementation) to the outside world, and at this point there's no reason for the outside world to know that the function `redex-mangle-names' is defined in the module contained in the file $PLTHOME/collects/redex/private/mangler/nomnomnom.rkt; it'd be better for the user if the blame was just the current blame you'd get if it were contracted in the external interface, or maybe even something like `(collection redex)'.

> 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?

I do understand what you're saying.  Whether or not we made that change (which pretty much puts us back in the old negative blame calculation world), I'm just wondering whether we also want an operation like that I've described above for use in collects, PLaneT packages, and the like.  However, that one really would need to be explicit, since you wouldn't want it to happen all the time.  (And to be fair, I'd still argue it'd be the right thing for the re-exporting that you're describing for redex, where you're re-exporting internal values to the outside world for use.)


Posted on the dev mailing list.