[use rules in Info field directly rather than looking them up in the environment
John Meacham <john@repetae.net>**20050930044647] hunk ./E/Rules.hs 6
-    applyRule'',
hunk ./E/Rules.hs 117
-fromRules rs = Rules $ Map.map snds $ Map.fromList $ sortGroupUnderF fst [ (tvrIdent $ ruleHead r,f r) | r <- rs ] where
-    f rule = rule
-    --f rule = rule { ruleFvs = fvs rule } where
-    --fvs rule = (freeVars $ ruleBody rule) Set.\\ freeVars (ruleArgs rule)
+fromRules rs = Rules $ Map.map snds $ Map.fromList $ sortGroupUnderF fst [ (tvrIdent $ ruleHead r,r) | r <- rs ]
hunk ./E/Rules.hs 123
-
-
-applyRule'' _ (TVr { tvrIdent = n }) (ty:s:rs) | n == preludeError, Just s' <- toString s  = do
-        mtick ruleError
-        return $ Just ((EError ("Prelude.error: " ++ s') ty),rs)
-applyRule'' (Rules rules) tvr xs = ans where
-    ans = case Map.lookup (tvrIdent tvr) rules of
-            Just rs -> f rs
-            _ -> return Nothing
-    f [] = return Nothing
-    f (r:_) | nArgs <= length xs, Just ss <- sequence (zipWith unify (ruleArgs r) xs) = ans ss where
-        nArgs = length (ruleArgs r)
-        ans ss = do
-            mtick (ruleName r)
-            let b = substMap (IM.fromList [ (i,x) | ~(~(EVar (TVr { tvrIdent = i })),x) <- concat ss ]) (ruleBody r)
-            return $ Just (b,(drop nArgs xs))
-    f (_:rs) = f rs
-
-
hunk ./E/Rules.hs 133
+instance Monoid ARules where
+    mempty = ARules []
+    mappend (ARules a) (ARules b) = ARules (sortUnder ruleNArgs (a ++ b))
hunk ./E/Rules.hs 137
-applyRules :: [Rule] -> [E] -> IO (Maybe (E,[E]))
-applyRules rs xs = f rs where
+
+-- applyRules :: ARules -> [E] -> IO (Maybe (E,[E]))
+applyRules (ARules rs) xs = f rs where
hunk ./E/SSimplify.hs 8
+import List
hunk ./E/SSimplify.hs 23
-import List
hunk ./E/SSimplify.hs 25
+import Options
hunk ./E/SSimplify.hs 27
+import qualified FlagOpts as FO
hunk ./E/SSimplify.hs 440
+    applyRule v xs  = do
+        z <- builtinRule v xs
+        case z of
+            Nothing | fopts FO.Rules -> applyRules (Info.fetch (tvrInfo v)) xs
+            x -> return x
hunk ./E/SSimplify.hs 447
-        z <- applyRule'' (so_rules sopts) v xs'
+        z <- applyRule v xs'
hunk ./E/SSimplify.hs 453
-        z <- applyRule'' (so_rules sopts) v xs'
+        z <- applyRule v xs'
hunk ./Main.hs 123
-    ts = [ let Identity x = idann rs ps (tvrIdent t) in t { tvrInfo = x `mappend` tvrInfo t } | t <-methodNames ch ] 
+    ts = [ let Identity x = idann rs ps (tvrIdent t) in t { tvrInfo = x `mappend` tvrInfo t } | t <-methodNames ch ]
hunk ./Main.hs 219
-    let rules = if fopts FO.Rules then hoRules ho else mempty
+    let rules = hoRules ho