module WorkTime.Reporting
( hoursFromText
, hoursFromFile
, hours
)
where
import Control.Applicative ((<$>))
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
import Data.Text (Text)
import qualified Data.Text.IO as TIO
import Data.Void (Void)
import Text.Megaparsec (ParseError, Token)
import WorkTime.WorkTime (WorkTime, fromText, workTimeHours,
workTimeNickname)
hoursFromText :: Text -> Either (ParseError (Token Text) Void) [(Text, Double)]
hoursFromText = (Map.toList . hours <$>) . fromText
hoursFromFile
:: FilePath -> IO (Either (ParseError (Token Text) Void) [(Text, Double)])
hoursFromFile = fmap hoursFromText . TIO.readFile
hours :: [WorkTime] -> Map Text Double
hours = Map.fromListWith (+) . map entryHours
entryHours :: WorkTime -> (Text, Double)
entryHours workTime = (workTimeNickname workTime, workTimeHours workTime)