I'm not completely clear here: Stevie seems to be talking about some more general purpose operation and I don't see much of a connection to the issue of what happens with re-provided bindings. While I agree that other operation is what happens "under the hood" for my proposed change to re-provided bindings, I don't see why that is relevant to the design decision of how re-provided bindings should behave.
So, let me ask this: Stevie, do you think that the current world for re-provided bindings is the right design decision (ie act as if they were all written like (provide/contract [f any/c])), or do you think this change I'm suggesting (act as if the contract were written a second time) is the right behavior (assuming we can solve the performance and single-binding issues Carl raised). Matthias: ditto. Robby On Sat, Jan 15, 2011 at 11:49 AM, Matthias Felleisen <matth...@ccs.neu.edu> wrote: > > I am totally with you. (I don't understand how you can satisfy Carl's > scenario and keep it inexpensive but all the power to you.) > > > > > On Jan 15, 2011, at 12:42 PM, Stevie Strickland wrote: > >> 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.) >> >> Stevie >> _________________________________________________ >> For list-related administrative tasks: >> http://lists.racket-lang.org/listinfo/dev > > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev