[allow arbitrary monad to be threaded through simplifications
John Meacham <john@repetae.net>**20060419023534] hunk ./E/SSimplify.hs 345
-    (stat,[(_,e')]) =  simplifyDs program sopts [(tvrSilly,e)]
+    Identity (stat,[(_,e')]) =  simplifyDs program sopts [(tvrSilly,e)]
hunk ./E/SSimplify.hs 348
-programSSimplify sopts prog =
-    let (stats,dsIn) = simplifyDs prog sopts (programDs prog)
+programSSimplify sopts prog = let
+    Identity (stats,dsIn) = simplifyDs prog sopts (programDs prog)
hunk ./E/SSimplify.hs 358
-type SM = IdNameT (StatT Identity)
+type SM m = IdNameT (StatT m)
hunk ./E/SSimplify.hs 360
-simplifyDs :: Program -> SimplifyOpts -> [(TVr,E)] -> (Stat,[(TVr,E)])
-simplifyDs prog sopts dsIn = (stat,dsOut) where
+simplifyDs :: forall m . Monad m => Program -> SimplifyOpts -> [(TVr,E)] -> m (Stat,[(TVr,E)])
+simplifyDs prog sopts dsIn = ans where
+    ans = do
+        ((dsOut,_),stat) <- runStatT (runIdNameT doit)
+        return (stat,dsOut)
hunk ./E/SSimplify.hs 369
-    ((dsOut,_),stat)  = runIdentity $ runStatT (runIdNameT doit)
hunk ./E/SSimplify.hs 381
-    go :: E -> Env -> IdNameT (StatT Identity) E
+    go :: E -> Env -> SM m E
hunk ./E/SSimplify.hs 385
-    f :: InE -> Env -> IdNameT (StatT Identity) OutE
+    f :: InE -> Env -> SM m OutE
hunk ./E/SSimplify.hs 469
-    doCase :: OutE -> InE -> InTVr -> [Alt InE] -> (Maybe InE) -> Env -> SM OutE
+    doCase :: OutE -> InE -> InTVr -> [Alt InE] -> (Maybe InE) -> Env -> SM m OutE
hunk ./E/SSimplify.hs 565
-    doConstCase :: {- Out -} Lit E E -> InE -> InTVr -> [Alt E] -> Maybe InE -> Env -> SM OutE
+    doConstCase :: {- Out -} Lit E E -> InE -> InTVr -> [Alt E] -> Maybe InE -> Env -> SM m OutE
hunk ./E/SSimplify.hs 596
-    applyRule :: OutTVr -> [OutE] -> Env -> SM (Maybe (OutE,[OutE]))
+    applyRule :: OutTVr -> [OutE] -> Env -> SM m (Maybe (OutE,[OutE]))
hunk ./E/SSimplify.hs 605
-    h :: OutE -> [OutE] -> Env -> SM OutE
+    h :: OutE -> [OutE] -> Env -> SM m OutE
hunk ./E/SSimplify.hs 634
-    didInline :: Env -> OutE -> [OutE] -> SM OutE
+    didInline :: Env -> OutE -> [OutE] -> SM m OutE