[make binding in demand analysis smarter
John Meacham <john@repetae.net>**20060719055430] hunk ./E/Demand.hs 16
-import Control.Monad.Identity
hunk ./E/Demand.hs 224
+isEmptyId 0 = True
+isEmptyId _ = False
+
+extEnv TVr { tvrIdent = i } _ | isEmptyId i = id
hunk ./E/Demand.hs 229
+
+extEnvE TVr { tvrIdent = i } _ | isEmptyId i = id
hunk ./E/Demand.hs 232
-extEnvs ts = local  (\ (env,dt) -> (mappend (fromList [ (tvrIdent t,Left s) |  (t,s) <- ts]) env,dt))
+extEnvs ts = local  (\ (env,dt) -> (mappend (fromList [ (tvrIdent t,Left s) |  (t,s) <- ts, not (isEmptyId (tvrIdent t))]) env,dt))
hunk ./E/Demand.hs 317
-        Just [_] -> extEnvE b (eCaseScrutinee ec) $  do  -- product type
-            (alt',enva :=> siga) <- analyze alt s
+        Just [_] -> do  -- product type
+            (alt',enva :=> siga) <- extEnvE b (eCaseScrutinee ec) $ analyze alt s
hunk ./E/Demand.hs 320
-            let nenv = foldr denvDelete (glb enva enve) ts
+            let nenv = enve `glb` foldr denvDelete enva (b:ts)
hunk ./E/Demand.hs 347
-    (ec',dts) <- runWriterT $ flip caseBodiesMapM ec $ \e -> do
+    (ec',dts) <- extEnvE (eCaseBind ec) (eCaseScrutinee ec) $ runWriterT $ flip caseBodiesMapM ec $ \e -> do
hunk ./E/Demand.hs 379
+shouldBind ELit {} = True
+shouldBind EVar {} = True
+shouldBind EPi {} = True
+shouldBind _ = False
hunk ./E/Demand.hs 385
-solveDs' (Just False) [(t,e@ELit {})] fixup wdone = do
+solveDs' (Just False) [(t,e)] fixup wdone | shouldBind e = do