{-# LANGUAGE DeriveGeneric #-} module Model.Date where import GHC.Generics import Data.Yaml data Date = Date { month :: Int , year :: Int } deriving (Show, Read, Eq, Generic) yearAndMonthDiff :: Date -> Date -> (Int, Int) yearAndMonthDiff d1 d2 = let totalMonths = monthDiff d1 d2 in (totalMonths `div` 12, totalMonths `mod` 12) monthDiff :: Date -> Date -> Int monthDiff (Date m1 y1) (Date m2 y2) = if y1 == y2 then 1 + abs (m1 - m2) else let (minM, minY, maxM, maxY) = if y1 < y2 then (m1, y1, m2, y2) else (m2, y2, m1, y1) in 12 * (maxY - minY - 1) + (13 - minM) + maxM instance FromJSON Date