From 94b4ff2e7e8b097e55335d30c93af8b48d47843d Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Fri, 24 Sep 2021 12:34:27 +0200 Subject: [PATCH] chore(term): generalize termToRational by using Enum instances --- src/Model/Types/DateTime.hs | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/Model/Types/DateTime.hs b/src/Model/Types/DateTime.hs index 218dd202b..d96f71f14 100644 --- a/src/Model/Types/DateTime.hs +++ b/src/Model/Types/DateTime.hs @@ -110,24 +110,16 @@ termFromText t (~=) = (==) `on` CI.mk termToRational :: TermIdentifier -> Rational -termToRational TermIdentifier{..} = fromInteger year + seasonOffset +termToRational TermIdentifier{..} = toRational year + seasonOffset where - seasonOffset - | Q1 <- season = 0 - | Q2 <- season = 0.25 - | Q3 <- season = 0.5 - | Q4 <- season = 0.75 + seasonOffset = fromIntegral (fromEnum season) % fromIntegral numSeasons termFromRational :: Rational -> TermIdentifier termFromRational n = TermIdentifier{..} where - year = floor n - remainder = n - fromInteger (floor n) - season - | remainder == 0 = Q1 - | remainder == 0.25 = Q2 - | remainder == 0.5 = Q3 - | otherwise = Q4 + year = floor n + remainder = n - fromInteger (floor n) -- properFraction problematic for negative year values + season = toEnum $ floor $ remainder * fromIntegral numSeasons instance PersistField TermIdentifier where toPersistValue = PersistRational . termToRational