From e5ba91f99722d047f90f94a710d77344db36e110 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 10 Mar 2020 12:35:27 +0100 Subject: Edge case handling in parsing and equation solving --- src/main.hs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/main.hs') diff --git a/src/main.hs b/src/main.hs index 20815f4..a11f7fc 100644 --- a/src/main.hs +++ b/src/main.hs @@ -1,20 +1,31 @@ import System.Environment +import System.IO +import System.IO.Error +import Control.Exception import Data.List import Parser import Equation - main :: IO () -main = do +main = catchIOError tryMain handler + where handler e + | isUserError e = putStrLn $ trimUserError (show e) + | otherwise = putStrLn "Error" + where trimUserError s = init $ tail $ dropWhile (/='(') s + +tryMain :: IO () +tryMain = do args <- getArgs checkArgs args equ <- checkParsing (head args) let reduced = reduce equ + l = filterNull $ left reduced putStrLn $ "Reduced From: " ++ show reduced - putStrLn $ "Polynomial degree: " ++ (show $ degree $ left reduced) - putSolutions (left reduced) - + putStrLn $ "Polynomial degree: " ++ (show $ degree l) + case l of [] -> putStrLn "Infinite solutions" + [_] -> putStrLn "No solution" + _ -> putSolutions l checkArgs :: [String] -> IO () checkArgs args -- cgit