module Support.Transform where
data TransformParms p = TransformParms {
transformIterate :: Iterate,
transformDumpProgress :: Bool,
transformSkipNoStats :: Bool,
transformOperation :: p -> IO p,
transformCategory :: String,
transformPass :: String,
transformName :: String
}
transformParms :: TransformParms p
transformParms = TransformParms {
transformIterate = DontIterate,
transformDumpProgress = False,
transformSkipNoStats = False,
transformCategory = "Unknown",
transformPass = "",
transformOperation = return,
transformName = ""
}
data Iterate = DontIterate | IterateMax !Int | IterateExactly !Int | IterateDone
deriving(Eq)
doIterate :: Iterate -> Bool -> Bool
doIterate IterateMax {} True = True
doIterate IterateDone True = True
doIterate IterateExactly {} _ = True
doIterate _ _ = False
iterateStep :: Iterate -> Iterate
iterateStep (IterateMax n) = IterateMax (n 1)
iterateStep (IterateExactly n) = IterateExactly (n 1)
iterateStep x = x