import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Lazy.Char8 as BLC import Control.Concurrent.Async import Data.List import qualified Codec.Compression.GZip as GZip import System.Environment (getArgs) import DemoTask main :: IO () main = do args <- getArgs case args of [] -> error $ "usage: " [filename] -> runSequential filename filenames -> runParallel filenames runParallel :: [FilePath] -> IO () runParallel filenames = do results <- mapM (async . runSequential) filenames mapM_ wait results runSequential :: FilePath -> IO () runSequential filename = BL.readFile filename >>= return . calculateRatio . BLC.lines . unzipIfNecessary >>= print where isZipped = ".gz" `isSuffixOf` filename unzipIfNecessary = if isZipped then GZip.decompress else id