module Data.Aviation.Casr.Logbook.Types.TimeAmount(
TimeAmount(..)
, HasTimeAmount(..)
, parttimeamount
, zerotimeamount
, addtimeamount
, timeAmountBy10
) where
import Control.Lens(makeClassy, ( # ))
import Data.Eq(Eq)
import Data.Digit(Digit, x0, digit, (/+/))
import Data.Int(Int)
import Data.Monoid(Monoid(mempty, mappend))
import Data.Ord(Ord)
import Prelude(Show, Num((+), (*)))
data TimeAmount =
TimeAmount {
_hours :: Int
, _tenthofhour :: Digit
} deriving (Eq, Ord, Show)
makeClassy ''TimeAmount
parttimeamount ::
Digit
-> TimeAmount
parttimeamount =
TimeAmount 0
zerotimeamount ::
TimeAmount
zerotimeamount =
TimeAmount 0 x0
addtimeamount ::
TimeAmount
-> TimeAmount
-> TimeAmount
TimeAmount f1 p1 `addtimeamount` TimeAmount f2 p2 =
let (h, q) = p1 /+/ p2
in TimeAmount (f1 + f2 + digit # h) q
timeAmountBy10 ::
TimeAmount
-> Int
timeAmountBy10 (TimeAmount a b) =
a * 10 + digit # b
instance Monoid TimeAmount where
mempty =
zerotimeamount
mappend =
addtimeamount