X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMain.hs;h=1cc4c73aa47d963e56f30a7188f05781f010b76c;hb=2e8aab2a69a8b9887e4f037115b80a2063d3a6b7;hp=0e7c30fa03bd5d93e23a5f61acf716d55ff549a9;hpb=eae92cebe7fab4afc5c7de377ec30ec348ef09ad;p=email-validator.git diff --git a/src/Main.hs b/src/Main.hs index 0e7c30f..1cc4c73 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,42 +1,39 @@ {-# LANGUAGE DoAndIfThenElse #-} {-# LANGUAGE RecordWildCards #-} -module Main +module Main (main) where import Control.Concurrent.ParallelIO.Global ( parallelInterleaved, - stopGlobalPool) -import Control.Monad (unless) + stopGlobalPool ) import qualified Data.ByteString.Char8 as BS ( hGetContents, hPutStrLn, lines, null, - pack, - readFile) + pack ) import Network.DNS ( Domain, Resolver, - ResolvConf(..), + ResolvConf( resolvTimeout ), defaultResolvConf, makeResolvSeed, - withResolver) -import Network.DNS.Lookup (lookupA, lookupMX) -import System.Directory (doesFileExist) -import System.Exit (exitWith, ExitCode(..)) + withResolver ) +import Network.DNS.Lookup ( lookupA, lookupMX ) import System.IO ( - IOMode( WriteMode ), - hClose, hFlush, - openFile, stdin, - stdout) + stdout ) -import CommandLine (Args(..), apply_args) -import EmailAddress -import ExitCodes (exit_input_file_doesnt_exist) +import CommandLine ( + Args( Args, accept_a, rfc5322 ), + get_args ) +import EmailAddress( + Address, + parts, + validate_syntax ) -- | Resolver parameters. We increase the default timeout from 3 to 10 @@ -103,24 +100,10 @@ validate resolver accept_a rfc5322 address = do 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 - is_file <- doesFileExist path - unless is_file $ - 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. + Args{..} <- get_args + + -- Split stdin into lines, which should result in a list of addresses. + input <- BS.hGetContents stdin let addresses = BS.lines input -- And remove the empty ones. @@ -142,10 +125,7 @@ main = do -- Output the results. let valid_addresses = map fst valid_results - _ <- mapM (BS.hPutStrLn output_handle) valid_addresses + mapM_ (BS.hPutStrLn stdout) valid_addresses stopGlobalPool - - -- Clean up. It's safe to try to close stdout. - hFlush output_handle - hClose output_handle + hFlush stdout