+setVerboseCore2Core = do setDynFlag Opt_ForceRecomp
+ setDynFlag Opt_D_verbose_core2core
+ upd (\s -> s { shouldDumpSimplPhase = const True })
+
+setDumpSimplPhases s = do setDynFlag Opt_ForceRecomp
+ upd (\s -> s { shouldDumpSimplPhase = spec })
+ where
+ spec = join (||)
+ . map (join (&&))
+ . map (map match)
+ . map (split '+')
+ . split ','
+ $ case s of
+ '=' : s' -> s'
+ _ -> s
+
+ join op [] = const True
+ join op ss = foldr1 (\f g x -> f x `op` g x) ss
+
+ match "" = const True
+ match s = case reads s of
+ [(n,"")] -> phase_num n
+ _ -> phase_name s
+
+ phase_num n (SimplPhase k) = n == k
+ phase_num _ _ = False
+
+ phase_name "gentle" SimplGently = True
+ phase_name _ _ = False
+