X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMain.hs;h=b2fc64b5eb71a441226f7772b2ed8e591afb9ca3;hb=e8b41784eaa68049f7a7354916c9c9920050db70;hp=6fa7da9203645e193d177de6a97ffed87a7c7f97;hpb=041d33c0e5ac9c0e9733f42cd96aa2fba07a043f;p=hath.git diff --git a/src/Main.hs b/src/Main.hs index 6fa7da9..b2fc64b 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,4 +1,5 @@ import Data.List ((\\), intercalate, intersperse) +import Data.Maybe (catMaybes, isNothing) import System.Exit (ExitCode(..), exitWith) import System.IO (stderr, hPutStrLn) @@ -114,35 +115,38 @@ main = do input <- inputfunc let cidr_strings = lines input - let cidrs = map Cidr.cidr_from_string cidr_strings + let cidrs = map cidr_from_string cidr_strings - if (any (== Cidr.None) cidrs) + if (any isNothing cidrs) then do putStrLn "Error: not valid CIDR notation." exitWith (ExitFailure exit_invalid_cidr) else do -- Nothing + -- Filter out only the valid ones. + let valid_cidrs = catMaybes cidrs + -- Get the mode of operation. mode <- CommandLine.parse_mode case mode of Regex -> do - let regexes = map cidr_to_regex cidrs - putStrLn $ alternate regexes + let regexes = map cidr_to_regex valid_cidrs + putStrLn $ alternate regexes Reduce -> do - _ <- mapM (putStrLn . show) (combine_all cidrs) - return () + _ <- mapM (putStrLn . show) (combine_all valid_cidrs) + return () Dupe -> do - _ <- mapM (putStrLn . show) dupes - return () - where - dupes = cidrs \\ (combine_all cidrs) + _ <- mapM (putStrLn . show) dupes + return () + where + dupes = valid_cidrs \\ (combine_all valid_cidrs) Diff -> do - _ <- mapM putStrLn deletions - _ <- mapM putStrLn additions - return () - where - dupes = cidrs \\ (combine_all cidrs) - deletions = map (\s -> "-" ++ (show s)) dupes - newcidrs = (combine_all cidrs) \\ cidrs - additions = map (\s -> "+" ++ (show s)) newcidrs + _ <- mapM putStrLn deletions + _ <- mapM putStrLn additions + return () + where + dupes = valid_cidrs \\ (combine_all valid_cidrs) + deletions = map (\s -> "-" ++ (show s)) dupes + newcidrs = (combine_all valid_cidrs) \\ valid_cidrs + additions = map (\s -> "+" ++ (show s)) newcidrs