X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMain.hs;h=b2fc64b5eb71a441226f7772b2ed8e591afb9ca3;hb=e8b41784eaa68049f7a7354916c9c9920050db70;hp=eeee9f6b6fe07f4ae40b580e093c818042b253c9;hpb=75038b45b9c379d8313511e58c3c0fe680810883;p=hath.git diff --git a/src/Main.hs b/src/Main.hs index eeee9f6..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,26 +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 = 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