[attach rules to newly created routines, propegate them into the cho properly
John Meacham <john@repetae.net>**20080229141314] hunk ./Main.hs 256
-    rules' <- createInstanceRules fullDataTable (hoClassHierarchy $ hoBuild ho')  (ds `mappend` hoEs (hoBuild ho))
-    nrules <- convertRules (progModule prog) tiData (hoClassHierarchy  $ hoBuild ho') allAssumps fullDataTable decls
-    (nds,srules) <- procAllSpecs (tiCheckedRules tiData) ds
+    instanceRules <- createInstanceRules fullDataTable (hoClassHierarchy $ hoBuild ho')  (ds `mappend` hoEs (hoBuild ho))
+    userRules <- convertRules (progModule prog) tiData (hoClassHierarchy  $ hoBuild ho') allAssumps fullDataTable decls
+    (nds,specializeRules) <- procAllSpecs (tiCheckedRules tiData) ds
hunk ./Main.hs 267
-    let rules = rules' `mappend` nrules `mappend` srules
+    let rules@(Rules rules') = instanceRules `mappend` userRules `mappend` specializeRules
hunk ./Main.hs 273
-    let allRules = hoRules (hoBuild ho) `mappend` rules
hunk ./Main.hs 274
-    -- some more useful values.
-    --let  namesInscope = fromList $ [ tvrIdent n | (n,_) <- Map.elems $ hoEs ho ] ++ [tvrIdent n | (n,_) <- ds ]
+    -- our initial program
+    Identity prog <- return $ programMapDs (\ (t,e) -> return (shouldBeExported (getExports $ hoExp ho') t,e)) $ atomizeApps False (programSetDs ds prog)
hunk ./Main.hs 277
-    let prog' = programSetDs ds prog
-    let Identity prog = programMapDs (\ (t,e) -> return (shouldBeExported (getExports $ hoExp ho') t,e)) $ atomizeApps False prog'
-    prog <- barendregtProg prog
-    let allProps = munionWith mappend theProps (idSetToIdMap (const (singleton prop_HASRULE)) (ruleHeadFreeVars allRules))
-
-    cho <- evaluate $ reprocessCho rules allProps cho
+    -- now we must attach rules to the existing chos, as well as the current ones
+    let addRule c = case mlookup (combIdent c) rules' of
+            Nothing -> c
+            Just rs -> combRules_u (List.union rs) c
+    prog <- return $ progCombinators_u (map addRule) prog
+    cho <- return $ choCombinators_u (fmap addRule) cho
hunk ./Main.hs 285
-    prog <- return $ runIdentity $ annotateProgram (choVarMap cho) (idann allRules allProps) letann lamann prog
+    prog <- return $ runIdentity $ annotateProgram (choVarMap cho) (idann mempty theProps) letann lamann prog
hunk ./Main.hs 448
-        choCombinators = fromList $ [ (tvrIdent t,emptyComb { combHead = t, combBody = e }) | (t,e) <- hoEs newHoBuild ],
+        choCombinators = fromList $ [ (combIdent c,c) | c <- progCombinators prog ],