From: Michael Orlitzky Date: Wed, 29 May 2013 20:07:31 +0000 (-0400) Subject: Add some comments. X-Git-Tag: 0.0.2~11 X-Git-Url: http://gitweb.michael.orlitzky.com/?p=email-validator.git;a=commitdiff_plain;h=8096b134a33ace33ea23368353c011e9f68549c7 Add some comments. --- diff --git a/src/Main.hs b/src/Main.hs index f38a7db..293f953 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -48,6 +48,8 @@ common_domains = map BSU.fromString [ "aol.com", "yahoo.com", "verizon.net" ] + +-- | Check whether the given domain has a valid MX record. validate_mx :: Resolver -> Domain -> IO Bool validate_mx resolver domain | domain `elem` common_domains = return True @@ -111,6 +113,7 @@ validate resolver address = do return (address, False) +-- | Append a ByteString to a file Handle, followed by a newline. append_handle_with_newline :: Handle -> BS.ByteString -> IO () append_handle_with_newline h bs = do BS.hPutStr h bs @@ -123,6 +126,8 @@ main :: IO () main = do Args{..} <- apply_args + -- Get the input from either stdin, or the file given on the command + -- line. input <- case input_file of Nothing -> BS.hGetContents stdin Just path -> do @@ -131,19 +136,29 @@ main = do exitWith (ExitFailure exit_input_file_doesnt_exist) BS.readFile path + -- Do the same for the output handle and stdout. output_handle <- case output_file of Nothing -> return stdout Just path -> openFile path WriteMode + -- Split the input into lines. let addresses = BSU.lines input + + -- And remove the empty ones. let nonempty_addresses = filter (not . BS.null) addresses rs <- makeResolvSeed resolv_conf withResolver rs $ \resolver -> do + -- Construst a list of [IO (Address, Bool)] let actions = map (validate resolver) nonempty_addresses + -- And compute them in parallel. results <- parallel actions stopGlobalPool + -- Find the pairs with a True in the second position. let good_pairs = filter snd results + -- And output the results. mapM_ ((append_handle_with_newline output_handle) . fst) good_pairs - hFlush output_handle - hClose output_handle + + -- Clean up. It's safe to try to close stdout. + hFlush output_handle + hClose output_handle