[divide rules into user rules, catalysts and specializations, allow dumping of them individually, clean up some code
John Meacham <john@repetae.net>**20061122023150] hunk ./E/FromHs.hs 225
-        rule t = emptyRule { ruleHead = methodVar, ruleArgs = tpat:map EVar args, ruleBinds = [ t | ~(EVar t) <- vs] ++ args, ruleBody = removeNewtypes dataTable body, ruleUniq = (Module (show name),0), ruleName = toAtom $ "Rule.{" ++ show name ++ "}"}  where
+        rule t = makeRule ("Rule.{" ++ show name ++ "}") (Module (show name),0) RuleSpecialization ruleFvs methodVar (tpat:map EVar args) (removeNewtypes dataTable body)  where
+            ruleFvs = [ t | ~(EVar t) <- vs] ++ args
hunk ./E/FromHs.hs 719
-        ar = makeRule ("Specialize.{" ++ show newName) (Module m,ui) [] t as (EVar ntvr)
+        ar = makeRule ("Specialize.{" ++ show newName) (Module m,ui) RuleSpecialization [] t as (EVar ntvr)
hunk ./E/Rules.hs 4
+    RuleType(..),
hunk ./E/Rules.hs 11
-    emptyRule,
hunk ./E/Rules.hs 18
-    printRule,
hunk ./E/Rules.hs 20
-    ruleFreeVars',
hunk ./E/Rules.hs 54
+import Options
hunk ./E/Rules.hs 59
+data RuleType = RuleSpecialization | RuleUser | RuleCatalyst
+    deriving(Eq)
+ {-! derive: GhcBinary !-}
hunk ./E/Rules.hs 69
+    ruleType :: RuleType,
hunk ./E/Rules.hs 85
+    ruleType = RuleUser,
hunk ./E/Rules.hs 116
-ruleFreeVars' ::  Rules -> Id -> IdSet
-ruleFreeVars' (Rules r) tvr = case mlookup tvr r of
-    Nothing -> mempty
-    Just rs -> (freeVars (map ruleBody rs) S.\\ freeVars (map ruleArgs rs))
-
hunk ./E/Rules.hs 128
-printRules (Rules rules) = mapM_ printRule (concat $ melems rules)
+{-# NOINLINE printRules #-}
+printRules ty (Rules rules) = mapM_ (\r -> printRule r >> putChar '\n') [ r | r <- concat $ melems rules, ruleType r == ty ]
+
+putDocMLn' :: Monad m => (String -> m ()) -> Doc -> m ()
+putDocMLn' putStr d = displayM putStr (renderPretty 0.80 (optColumns options) d) >> putStr "\n"
hunk ./E/Rules.hs 137
-    putDocMLn CharIO.putStr $  (tshow n) <+> text "forall" <+> hsep (map p vs) <+> text "."
+    putDocMLn' CharIO.putStr $  (tshow n) <+> text "forall" <+> hsep (map p vs) <+> text "."
hunk ./E/Rules.hs 140
-    putDocMLn CharIO.putStr (indent 2 (pprint e1))
-    putDocMLn CharIO.putStr $ text " ====>"
-    putDocMLn CharIO.putStr (indent 2 (pprint e2))
-    putDocMLn CharIO.putStr (indent 2 (text "::" <+> ty))
+    putDocMLn' CharIO.putStr (indent 2 (pprint e1) <+> text "::" <+> ty )
+    putDocMLn' CharIO.putStr $ text " ==>" <+> pprint e2
+    --putDocMLn CharIO.putStr (indent 2 (pprint e2))
hunk ./E/Rules.hs 251
+    -> RuleType -- ^ type of rule
hunk ./E/Rules.hs 257
-makeRule name uniq fvs head args body = rule where
+makeRule name uniq ruleType fvs head args body = rule where
hunk ./E/Rules.hs 262
+        ruleType = ruleType,
hunk ./FlagDump.flags 45
-rules        show all rules
+rules        show all user rules and catalysts
+rules-spec  show specialization rules
hunk ./FrontEnd/Lexer.hs 619
-    (["RULES"],PragmaRules False),
-    (["METARULES"],PragmaRules True),
+    (["RULES","RULE"],PragmaRules False),
+    (["CATALYST","CATALYSTS"],PragmaRules True),
hunk ./Ho/Build.hs 213
-    when (dump FD.Rules) $ do
-        putStrLn "  ---- rules ---- "
-        printRules (hoRules ho)
+    let rules = hoRules ho
+    wdump FD.Rules $ putStrLn "  ---- user rules ---- " >> printRules RuleUser rules
+    wdump FD.Rules $ putStrLn "  ---- user catalysts ---- " >> printRules RuleCatalyst rules
+    wdump FD.RulesSpec $ putStrLn "  ---- specializations ---- " >> printRules RuleSpecialization rules
hunk ./Main.hs 287
-    let nrules = fromRules [ makeRule n (progModule prog,i) vs head args e2 | (n,vs,e1,e2) <- rawRules, let (EVar head,args) = fromAp e1 | i <- [1..] ]
+    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..] ]
hunk ./Main.hs 289
-    wdump FD.Rules $ printRules rules
+
+    wdump FD.Rules $ putStrLn "  ---- user rules ---- " >> printRules RuleUser rules
+    wdump FD.Rules $ putStrLn "  ---- user catalysts ---- " >> printRules RuleCatalyst rules
+    wdump FD.RulesSpec $ putStrLn "  ---- specializations ---- " >> printRules RuleSpecialization rules
+
hunk ./Main.hs 311
-    wdump FD.Rules $ printRules specRules
+    wdump FD.RulesSpec $ printRules RuleSpecialization specRules
hunk ./Main.hs 590
+    if optMode options == CompileHo then return () else do
+
hunk ./Main.hs 604
-    wdump FD.Rules $ printRules rules
+    wdump FD.Rules $ putStrLn "  ---- user rules ---- " >> printRules RuleUser rules
+    wdump FD.Rules $ putStrLn "  ---- user catalysts ---- " >> printRules RuleCatalyst rules
+    wdump FD.RulesSpec $ putStrLn "  ---- specializations ---- " >> printRules RuleSpecialization rules
hunk ./Main.hs 616
-    if optMode options == CompileHo then return () else do
hunk ./data/props.txt 25
+_HASRULE