[make collect occurance info work on combinators
John Meacham <john@repetae.net>**20080229122342] hunk ./E/SSimplify.hs 80
-    let dsIn = programDs (runIdentity $ programMapBodies (return . subst (tVr (-1) Unknown) Unknown) prog)
+    let dsIn = progCombinators (runIdentity $ programMapBodies (return . subst (tVr (-1) Unknown) Unknown) prog)
hunk ./E/SSimplify.hs 82
-    in (programSetDs dsIn' prog) { progFreeIds = idMapToIdSet fvs, progUsedIds = uids }
+    in (progCombinators_s dsIn' prog) { progFreeIds = idMapToIdSet fvs, progUsedIds = uids }
hunk ./E/SSimplify.hs 172
-        ds''' <- collectDs ds fve
-        return (maybeLetRec ds''' e')
+        ds''' <- collectDs (map bindComb ds) fve
+        return (maybeLetRec (map combBind ds''') e')
hunk ./E/SSimplify.hs 209
-collectBinding :: Bind -> OM (Bind,OMap)
-collectBinding (t,e) = do
-    e' <- collectOccurance e
-    let rvars = freeVars (Info.fetch (tvrInfo t) :: ARules) :: IdSet
+collectBinding :: Comb -> OM (Comb,OMap)
+collectBinding comb = do
+    e' <- collectOccurance $ combBody comb
+    let rvars = freeVars (combRules comb)  :: IdSet
hunk ./E/SSimplify.hs 214
-    return ((t,e'),romap)
+    return (combBody_s e' comb,romap)
hunk ./E/SSimplify.hs 218
-collectDs :: [Bind] -> OMap -> OM [Bind]
+collectCombs :: [Comb] -> OMap -> OM [Comb]
+collectCombs cs _ = return cs
+
+collectDs :: [Comb] -> OMap -> OM [Comb]
hunk ./E/SSimplify.hs 225
-    let graph = newGraph ds' (\ (((t,_),_),_) -> tvrIdent t) (\ ((_,rv),fv) -> mkeys (fv `mappend` rv))
-        rds = reachable graph (mkeys fve ++ [ tvrIdent t | (t,_) <- ds,  (tvrIdent t `member` exp)])
+    let graph = newGraph ds' (\ ((comb,_),_) -> combIdent comb) (\ ((_,rv),fv) -> mkeys (fv `mappend` rv))
+        rds = reachable graph (mkeys fve ++ [ combIdent t | t <- ds,  (combIdent t `member` exp)])
hunk ./E/SSimplify.hs 229
-        graph' = newGraph rds (\ (((t,_),_),_) -> tvrIdent t) (\ (_,fv) -> mkeys fv)
-        (lb,lbds) =  findLoopBreakers (\ (((t,e),_),_) -> loopFunc t e) (const True) graph'
+        graph' = newGraph rds (\ ((comb,_),_) -> combIdent comb) (\ (_,fv) -> mkeys fv)
+        (lb,lbds) =  findLoopBreakers (\ ((comb,_),_) -> loopFunc (combHead comb) (combBody comb)) (const True) graph'
hunk ./E/SSimplify.hs 233
-        ffids = fromList [ (tvrIdent t,lup t) | ((t,_),_) <- ds'' ]
-        cycNodes = (fromList $ [ tvrIdent v | (((v,_),_),_) <- cyclicNodes graph'] :: IdSet)
+        ffids = fromList [ (tvrIdent t,lup t) | (Comb { combHead = t },_) <- ds'' ]
+        cycNodes = (fromList $ [ combIdent c | ((c,_),_) <- cyclicNodes graph'] :: IdSet)
hunk ./E/SSimplify.hs 239
-        lup t = case tvrIdent t `elem` [ tvrIdent t | (((t,_),_),_) <- lb] of
+        lup t = case tvrIdent t `elem` [ combIdent c | ((c,_),_) <- lb] of
hunk ./E/SSimplify.hs 244
-        ds''' = [ (calcStrictInfo $ annbind ffids t ,e) | ((t,e),_) <- ds'']
-        froo (t,e) = ((t {tvrType = t' },e),fvs) where
-            (t',fvs) = collectOccurance' (tvrType t)
+        ds''' = [ combHead_s (calcStrictInfo $ annbind ffids (combHead comb)) comb | (comb,_) <- ds'']
+        froo comb = (combHead_s (combHead comb) {tvrType = t' } comb,fvs) where
+            (t',fvs) = collectOccurance' (tvrType $ combHead comb)
hunk ./E/SSimplify.hs 249
-    tell $ ((OMap $ nfid' `andOM` fids) S.\\ ffids,fromList (map (tvrIdent . fst) ds''''))
+    tell $ ((OMap $ nfid' `andOM` fids) S.\\ ffids,fromList (map combIdent ds''''))
hunk ./E/SSimplify.hs 286
+    so_rules     :: IdMap ARules,
hunk ./E/SSimplify.hs 295
-           , so_cachedScope = cacheSubst (extendScope initScope mempty { envSubst = mapMaybeIdMap bb  (so_boundVars opts) })
+           , so_cachedScope = cacheSubst (extendScope initScope mempty { envSubst = mapMaybeIdMap bb  (so_boundVars opts), envRules = so_rules opts })
hunk ./E/SSimplify.hs 354
+    envRules :: IdMap ARules,
hunk ./E/SSimplify.hs 425
-    Identity ([(_,e')],stat) =  runStatT $ simplifyDs program sopts [(tvrSilly,e)]
+    Identity ([Comb { combBody = e' }],stat) =  runStatT $ simplifyDs program sopts [bindComb (tvrSilly,e)]
hunk ./E/SSimplify.hs 429
-    Identity (dsIn,stats) = runStatT $ simplifyDs prog sopts (programDs prog)
-    in (programSetDs dsIn prog) { progStats = progStats prog `mappend` stats }
+    Identity (dsIn,stats) = runStatT $ simplifyDs prog sopts (progCombinators prog)
+    in (progCombinators_s dsIn prog) { progStats = progStats prog `mappend` stats }
hunk ./E/SSimplify.hs 435
-    dsIn <- simplifyDs prog sopts (programDs prog)
-    return (programSetDs dsIn prog)
+    dsIn <- simplifyDs prog sopts (progCombinators prog)
+    return (progCombinators_s dsIn prog)
hunk ./E/SSimplify.hs 461
-simplifyDs :: forall m . MonadStats m => Program -> SimplifyOpts -> [(TVr,E)] -> m [(TVr,E)]
+simplifyDs :: forall m . MonadStats m => Program -> SimplifyOpts -> [Comb] -> m [Comb]
hunk ./E/SSimplify.hs 467
-        return dsOut
+        return (map bindComb dsOut)
hunk ./E/SSimplify.hs 474
-        doDs dsIn
+        doDs (map combBind dsIn)
hunk ./E/SSimplify.hs 614
-                done cont $ caseUpdate ECase { 
+                done cont $ caseUpdate ECase {
hunk ./E/SSimplify.hs 616
-                    eCaseScrutinee = e, 
-                    eCaseType = t', 
-                    eCaseBind = b, 
-                    eCaseAlts = as'', 
+                    eCaseScrutinee = e,
+                    eCaseType = t',
+                    eCaseBind = b,
+                    eCaseAlts = as'',
hunk ./E/SSimplify.hs 716
-                done StartContext $ caseUpdate ECase { 
+                done StartContext $ caseUpdate ECase {
hunk ./E/SSimplify.hs 718
-                    eCaseScrutinee = e, 
-                    eCaseType = t', 
-                    eCaseBind =  b', 
-                    eCaseAlts = as', 
+                    eCaseScrutinee = e,
+                    eCaseType = t',
+                    eCaseBind =  b',
+                    eCaseAlts = as',