-
simonpj authored
Improve SpecConstr This commit fixes SpecConstr so that it can see the effect of enclosing case expressions properly. That's what the "cons" field in ScEnv is for. As a result, consider this function: data AccessPath = Cont AccessPath | Value Int demandAll n ap@(Cont (Value (I# i1))) = case n of 0 -> i1 other -> i1 +# demandAll (n-1) ap SpecConstr now successfully compiles it to this: $s$wdemandAll = \ i1 :: PrelGHC.Int# sc :: PrelGHC.Int# -> case sc of ds { 0 -> i1; __DEFAULT -> PrelGHC.+# i1 (Foo.$s$wdemandAll i1 (PrelGHC.-# ds 1)) } with the rule "SC:$wdemandAll1" __forall i1 :: PrelGHC.Int# , sc :: PrelGHC.Int# . Foo.$wdemandAll sc (Foo.$wCont (Foo.$wValue (PrelBase.$wI# i1))) = Foo.$s$wdemandAll i1 sc ;
e6dff21d