packages feed

fibon-0.2.0: tools/fibon-analyse/Fibon/Analyse/Main.hs

module Main (main) where
import Fibon.Analyse.AnalysisRoutines
import Fibon.Analyse.Analysis
import Fibon.Analyse.CommandLine
import Fibon.Analyse.Output
import Fibon.Analyse.Result
import Fibon.Analyse.Tables
import System.Environment
import System.Exit

main :: IO ()
main = do
  (opts, files) <- getCommandLine
  mbResults <- mapM (runAnalysis ghcStatsAnalysis) files
  case concat `fmap` sequence mbResults of
    Nothing -> putStrLn "Error Parsing Results"
    Just rs -> do
      let fmt  = optOutputFormat opts
      let norm = getNormFun opts
      putStrLn $ renderSummaryTable rs norm fmt ghcStatsSummaryTable
      putStrLn $ renderTables       rs norm fmt ghcStatsSummaryTable


getCommandLine :: IO (Opt, [FilePath])
getCommandLine = do
  args    <- getArgs
  case parseCommandLine args of
    Left err -> putStrLn err >> exitFailure
    Right (Opt {optHelpMsg = Just msg}, _) -> putStrLn msg >> exitSuccess
    Right opts      -> return opts

getNormFun :: Opt -> (ResultColumn a -> Normalize a)
getNormFun o =
  case optNormalizeBy o of
    ByPercent -> NormPercent
    ByRatio   -> NormRatio
    ByNone    -> NormNone