packages feed

task-distribution-0.1.0.0: app/RunDemoTask.hs

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|[filename]>"
   [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