[Introduced monadic mapping functions for terms and rules
tobias@goedderz.info**20150213164658
 Ignore-this: 4bc67a627cf248cd9de12fd73d374aa7
] hunk ./src/Igor2/Data/Rules.hs 14
-    
+
+    mapRuleRhsM, mapRuleLhsM, mapRuleM,
+
hunk ./src/Igor2/Data/Rules.hs 42
-import Syntax hiding (sameSymAt)
-import qualified Syntax as T (sameSymAt)
+import Syntax hiding (sameSymAt, mapTermM)
+import qualified Syntax as T (sameSymAt, mapTermM)
hunk ./src/Igor2/Data/Rules.hs 85
+mapRuleRhsM :: Monad m => (TExp -> m TExp) -> Rule -> m Rule
+mapRuleRhsM f r@(R {rhs = rhs}) = T.mapTermM f rhs
+    >>= \new_rhs -> return r { rhs = new_rhs }
+
+mapRuleLhsM :: Monad m => (TExp -> m TExp) -> Rule -> m Rule
+mapRuleLhsM f r@(R {lhs = lhs}) = mapM (T.mapTermM f) lhs
+    >>= \new_lhs -> return r { lhs = new_lhs }
+
+mapRuleM :: Monad m => (TExp -> m TExp) -> Rule -> m Rule
+mapRuleM f r = mapRuleLhsM f r >>= mapRuleRhsM f
hunk ./src/Syntax/Class/Term.hs 19
-    
+    mapTermM,
+
hunk ./src/Syntax/Class/Term.hs 129
-    
+
+mapTermM :: (Monad m, Term t) => (t -> m t) -> t -> m t
+mapTermM f t = f =<< liftM (root t) new_subtermsM
+    where
+        new_subtermsM = mapM (mapTermM f) (subterms t)