packages feed

fibon-0.1.0: tools/fibon-analyse/Fibon/Analyse/AnalysisRoutines.hs

module Fibon.Analyse.AnalysisRoutines(
    noAnalysis
  , ghcStatsAnalysis
  , Analysis(..)
)
where

import Fibon.Result
import Fibon.Analyse.Result
import Fibon.Analyse.Metrics
import Fibon.Analyse.ExtraStats

data Analysis a = Analysis {
      fibonAnalysis :: (FibonResult -> IO FibonStats)-- ^ RunData analyser
    , extraParser   :: (String  -> Maybe a)          -- ^ extraStats parser
    , extraAnalysis :: ([a]     -> IO    a)          -- ^ extraStats analyser
  }

noAnalysis :: Analysis a
noAnalysis  = Analysis {
      fibonAnalysis  = return . getStats
    , extraParser    = const Nothing
    , extraAnalysis  = return . head
  }
  where 
    getStats fr = FibonStats {
          compileTime = Single $ ExecTime ((buildTime . buildData) fr)
        , binarySize  = Single $ MemSize 0 
        , wallTime    = Single $ ExecTime ((meanTime . summary . runData) fr)
      }

ghcStatsAnalysis :: Analysis GhcStats
ghcStatsAnalysis = noAnalysis {
      extraParser = parseGhcStats
  }

--makeAnalysis :: Analysis a -> (String -> Maybe b) -> Analysis b