module Data.Aviation.Casr.Logbook.Hours (
Hours(..)
, zeroHours
, addHours
, fractionalHours
) where
import Data.Aviation.Casr.Logbook.Printer.Markdown
import Data.Aviation.Casr.Logbook.Printer.Html
-- abstract
data Hours =
Hours
Int -- full
Int -- partial
deriving (Eq, Ord, Show)
zeroHours ::
Hours
zeroHours =
Hours 0 0
addHours ::
Hours
-> Hours
-> Hours
Hours f1 p1 `addHours` Hours f2 p2 =
let (h, q) = divMod (p1 + p2) 10
in Hours (f1 + f2 + h) q
instance Monoid Hours where
mempty =
zeroHours
mappend =
addHours
instance Markdown Hours where
markdown (Hours t p) =
"* Hours: **`" ++ markdown t ++ "." ++ markdown p ++ "`**\n"
instance Html Hours where
html (Hours t p) =
concat
[
""
, "Hours"
, ""
, ": "
, ""
, html t
, "."
, html p
, ""
]
fractionalHours ::
Fractional a =>
Hours
-> a
fractionalHours (Hours f p) =
fromIntegral f + (fromIntegral p / 10)