import Ex import Util import FileExList import CheckAnswer import System.Environment data Result = Result { failed :: [Ex], tried :: [Ex] } emptyResult :: Result emptyResult = Result { failed = [], tried = [] } updateResult :: Bool -> Ex -> Result -> Result updateResult ok ex (Result{failed = f, tried = t}) = Result { failed = if ok then f else ex:f, tried = ex:t } runExs :: [Ex] -> IO Result runExs = runExs_ emptyResult runExs_ :: Result -> [Ex] -> IO Result runExs_ r [] = return r runExs_ r (ex:xs) = do putStrLn $ "Translate: " ++ question ex l <- getLine if checkAnswer ex l then do putStrLn "Correct!" runExs_ (updateResult True ex r) xs else do putStrLn "Incorrect." putStrLn "Correct: " mapM_ (putStrLn . (" "++)) (answers ex) runExs_ (updateResult False ex r) xs printResult :: Result -> IO () printResult r = do putStrLn $ "Number of exercises: " ++ show n putStrLn $ "Number of correct answers: " ++ show (n - f) where n = length $ tried r f = length $ failed r main :: IO () main = do args <- getArgs case args of [file] -> do exs <- readExFile file exs' <- randomExercises 5 exs r <- runExs exs' printResult r _ -> fail "Usage: ConsoleMain "