On Thu, Jan 8, 2015 at 11:26 PM, Keean Schupke <[email protected]> wrote:
> The alternative here is to push int2 into a dynamic scoping stack for this > instance so it overrides int1. This is probably more useful as it allows > local changed to type-class resolution. > That was pretty much the intention of my original example, except I'm not sure why you say this is a *dynamic* scoping thing. My intent was that the "using" construct should operate on the instance environment in much the way that the "let" construct operates on the binding environment, and that instance resolution should proceed according to the customary lexical resolution rules by resolving required instances at the call site against the instance environment. But I'm still failing to see why this renders anything incoherent. An instance is acting here as something very like a type parameter to the called procedure. By virtue of its presence, it induces a type-driven specialization of the procedure that is called. At the tail end of your "record lifting" email you note that instances only have to be coherent where they are implicit. If so, then it sounds like we are in agreement that explicit instance overrides which induce quasitype-driven specialization do not entail any coherence problems. Are we? I do agree that records and type classes seem suspiciously similar, but I wonder how that intuition will hold up as we start talking about kind classes... shap
_______________________________________________ bitc-dev mailing list [email protected] http://www.coyotos.org/mailman/listinfo/bitc-dev
