import Data.List ((\\), intercalate, intersperse)
+import Data.Maybe (catMaybes, isNothing)
import System.Exit (ExitCode(..), exitWith)
import System.IO (stderr, hPutStrLn)
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