problem :: String -> M ()
problem str = do lift $ putStrLn str
                 st <- get
                 put $ st { stHadAProblem = True }
problem :: String -> M ()
problem str = do lift $ putStrLn str
                 st <- get
                 put $ st { stHadAProblem = True }
problem str = do lift $ putStrLn str
                 st <- get
                 put $ st { stHadAProblem = True }