[convert program transformation to use parameters type
John Meacham <john@repetae.net>**20060719072857] hunk ./Main.hs 159
-barendregtProg prog = do
-    transformProgram "Barendregt" DontIterate (dump FD.CorePass) (return . barendregtProgram) prog
+barendregtProg prog = transformProgram transBarendregt prog
+
+transBarendregt = transformParms { transformCategory = "Barendregt", transformIterate = DontIterate, transformDumpProgress = corePass, transformOperation =  return . barendregtProgram }
hunk ./Main.hs 305
+            tparms = transformParms { transformPass = "Init", transformDumpProgress = coreMini }
hunk ./Main.hs 320
-        mprog <- transformProgram "Simple Recursive" DontIterate (dump FD.CoreMini) sRec mprog
+        mprog <- transformProgram tparms { transformCategory = "Simple Recursive", transformOperation = sRec } mprog
hunk ./Main.hs 323
-        mprog <- transformProgram "typeAnalyze" DontIterate (dump FD.CoreMini) (typeAnalyze True) mprog
+        mprog <- transformProgram tparms { transformCategory = "typeAnalyze", transformOperation = typeAnalyze True } mprog
hunk ./Main.hs 328
-        mprog <- transformProgram "floatOutward" DontIterate (dump FD.CoreMini) floatOutward mprog
+        mprog <- transformProgram tparms { transformCategory = "FloatOutward", transformOperation = floatOutward } mprog
hunk ./Main.hs 335
-        mprog <- transformProgram "float inward" DontIterate (dump FD.CoreMini) programFloatInward mprog
+        mprog <- transformProgram tparms { transformCategory = "FloatInward", transformOperation = programFloatInward } mprog
hunk ./Main.hs 495
-programPrune prog = transformProgram "Prune Unreachable" DontIterate (dump FD.CorePass || coreMini) (return . programPruneUnreachable) prog
+programPrune prog = transformProgram transformParms { transformCategory = "Prune Unreachable", transformDumpProgress  = miniCorePass, transformOperation = return . programPruneUnreachable } prog
hunk ./Main.hs 500
-    transformProgram "eta expansion" DontIterate (dump FD.CorePass || coreMini) (const $ return prog' { progStats = progStats prog' `mappend` stats }) prog
+    transformProgram transformParms { transformCategory = "EtaExpansion", transformDumpProgress = miniCorePass,  transformOperation = const $ return prog' { progStats = progStats prog' `mappend` stats } } prog
hunk ./Main.hs 518
+transTypeAnalyze = transformParms { transformCategory = "TypeAnalyze",  transformOperation = typeAnalyze True }
hunk ./Main.hs 549
-    prog <- transformProgram "Initial Prune Unreachable" DontIterate False (return . programPruneUnreachable) prog
+    prog <- transformProgram transformParms { transformCategory = "PruneUnreachable", transformOperation = return . programPruneUnreachable } prog
hunk ./Main.hs 579
-        prog <- transformProgram "lambda lift" DontIterate (dump FD.Progress) (lambdaLift finalStats) prog
+        prog <- transformProgram transformParms { transformCategory = "LambdaLift", transformDumpProgress = dump FD.Progress, transformOperation = lambdaLift finalStats } prog
hunk ./Main.hs 588
-    prog <- transformProgram "typeAnalyze after method" DontIterate True (typeAnalyze True) prog
+    prog <- transformProgram transTypeAnalyze { transformPass = "AfterMethod", transformDumpProgress = True } prog
hunk ./Main.hs 599
-    prog <- transformProgram "typeAnalyze" DontIterate True (typeAnalyze True) prog
+    prog <- transformProgram transTypeAnalyze { transformPass = "AfterSimplify", transformDumpProgress = True } prog
hunk ./Main.hs 619
-    prog <- transformProgram "lambda lift" DontIterate (dump FD.Progress) (lambdaLift finalStats) prog
+    prog <- transformProgram transformParms { transformCategory = "LambdaLift", transformDumpProgress = dump FD.Progress, transformOperation = lambdaLift finalStats } prog
hunk ./Main.hs 777
-    prog <- transformProgram name IterateDone dodump g prog  { progStats = mempty }
+    prog <- transformProgram transformParms { transformCategory = "Simplify", transformPass = name, transformIterate = IterateDone, transformDumpProgress = dodump, transformOperation = g } prog { progStats = mempty }
hunk ./Main.hs 781
+{-
hunk ./Main.hs 788
-
+-}
hunk ./Main.hs 792
-    prog <- transformProgram name iterate dodump g prog  { progStats = mempty }
+    prog <- transformProgram transformParms { transformCategory = "Simplify", transformPass = name, transformIterate = iterate, transformDumpProgress = dodump, transformOperation = g } prog { progStats = mempty }
hunk ./Main.hs 828
-transformProgram ::
-    String                      -- ^ name of pass
-    -> Iterate                     -- ^ wether to iterate
-    -> Bool                     -- ^ whether to dump progress
-    -> (Program -> IO Program)  -- ^ what to run
-    -> Program
-    -> IO Program
+transformProgram :: TransformParms -> Program -> IO Program
hunk ./Main.hs 830
-transformProgram _ (IterateMax n) _ _ prog | n <= 0 = return prog
-transformProgram _ (IterateExactly n) _ _ prog | n <= 0 = return prog
-transformProgram name iterate dodump f prog = do
+transformProgram TransformParms { transformIterate = IterateMax n } prog | n <= 0 = return prog
+transformProgram TransformParms { transformIterate = IterateExactly n } prog | n <= 0 = return prog
+transformProgram tp prog = do
+    let dodump = transformDumpProgress tp
+        name = transformCategory tp ++ pname (transformPass tp) ++ pname (transformName tp)
+        pname "" = ""
+        pname xs = '-':xs
+        iterate = transformIterate tp
hunk ./Main.hs 849
-    prog' <- Control.Exception.catch (f prog { progStats = mempty }) ferr
+    prog' <- Control.Exception.catch (transformOperation tp prog { progStats = mempty }) ferr
hunk ./Main.hs 858
-    if doIterate iterate estat then transformProgram name (iterateStep iterate) dodump f prog' { progStats = istat `mappend` estat } else
+    if doIterate iterate estat then transformProgram tp { transformIterate = iterateStep iterate } prog' { progStats = istat `mappend` estat } else