fibon-0.1.0: tools/fibon-analyse/Fibon/Analyse/Parse.hs
module Fibon.Analyse.Parse(
GhcStats(..)
, parseFibonResults
)
where
import qualified Data.Map as M
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Fibon.Result
import Fibon.Analyse.ExtraStats
import Fibon.Analyse.Result
import System.FilePath
parseFibonResults :: FilePath -- ^ input file
-> IO (Maybe (M.Map ResultLabel [FibonResult])) -- ^ Result
parseFibonResults file = do
input <- T.readFile file
case runParser input of
Nothing -> return Nothing
Just [] -> return Nothing
Just rs -> return (Just $ M.mapKeys addFileSource (groupResults rs))
where
baseName = takeBaseName file
addFileSource s = baseName ++ s
runParser :: T.Text -> Maybe [FibonResult]
runParser text = sequence (map parseLine (T.lines text))
parseLine :: T.Text -> Maybe FibonResult
parseLine line =
case reads (T.unpack line) of
[(r, _)] -> Just r
_ -> Nothing
groupResults :: [FibonResult] -> M.Map ResultLabel [FibonResult]
groupResults = foldr grouper M.empty
where
grouper r = M.insertWith (++) (benchType r) [r]
benchType r = dropWhile (/= '-') (benchName r)