[move specialization creation code from Main.hs to E.FromHs, perform it when all other rules are being created as well.
John Meacham <john@repetae.net>**20061122052740] hunk ./E/FromHs.hs 5
-    makeSpec,
+    procAllSpecs,
hunk ./E/FromHs.hs 44
+import qualified FrontEnd.Tc.Type as Type
hunk ./E/FromHs.hs 716
+procAllSpecs :: Monad m => [Type.Rule] -> [(TVr,E)] -> m ([(TVr,E)],Rules)
+procAllSpecs rs ds = do
+    let specMap = Map.fromListWith (++) [ (toId n,[r]) | r@Type.RuleSpec { Type.ruleName = n } <- rs]
+        f (t,e) | Just rs <- Map.lookup (tvrIdent t) specMap = do
+            hs <- mapM (makeSpec (t,e)) rs
+            return (unzip hs)
+        f _ = return mempty
+    (nds,rules) <- mconcat `liftM` mapM f ds
+    return $ (nds,fromRules rules)
+
hunk ./FrontEnd/Tc/Main.hs 567
-        sc `subsumes` t
+        listenPreds $ sc `subsumes` t
hunk ./Main.hs 225
-procSpecs :: Monad m => (Map.Map Name [Type.Rule]) -> (TVr,E) -> m ([(TVr,E)],[Rule])
-procSpecs specMap (t,e) | Just n <- fromId (tvrIdent t), Just rs <- Map.lookup n specMap = do
-    hs <- mapM (makeSpec (t,e)) rs
-    let (defs,rls) = unzip hs
-        crules = Info.fetch (tvrInfo t)
-    return $ ((t { tvrInfo = Info.insert (mappend crules (arules rls)) $ tvrInfo t},e):defs,rls)
-procSpecs _specMap d = return ([d],[])
hunk ./Main.hs 274
-    -- Build rules
+    -- Build rules from instances, specializations, and user specified rules and catalysts
hunk ./Main.hs 277
-    --let nrules = fromRules [ makeRule n (progModule prog,i) RuleUser vs head args e2 | (n,vs,e1,e2) <- rawRules, let (EVar head,args) = fromAp e1 | i <- [1..] ]
-    let rules = rules' `mappend` nrules
+    (nds,srules) <- procAllSpecs (tiCheckedRules tiData) ds
+
+    ds <- return $ ds ++ nds
+
+    let rules = rules' `mappend` nrules `mappend` srules
hunk ./Main.hs 290
-    let inscope =  [ tvrIdent n | (n,_) <- Map.elems $ hoEs ho ] ++ [tvrIdent n | (n,_) <- ds ]
-        namesInscope = fromList inscope
+    let  namesInscope = fromList $ [ tvrIdent n | (n,_) <- Map.elems $ hoEs ho ] ++ [tvrIdent n | (n,_) <- ds ]
hunk ./Main.hs 298
-    -- Create Specializations
-    let specMap = Map.fromListWith (++) [ (n,[r]) | r@Type.RuleSpec { Type.ruleName = n } <- tiCheckedRules tiData]
-    nds <- mapM (procSpecs specMap) (programDs prog)
-    prog <- return $ programSetDs (concat (fsts nds)) prog
-    let specRules = fromRules $ concat $ snds nds
-    wdump FD.RulesSpec $ printRules RuleSpecialization specRules
-    rules <- return $ specRules `mappend` rules
-    allRules <- return $ allRules `mappend` rules