From f411fde42d913d5a9ef357674ab77934c8e1ba42 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Mon, 4 Oct 2021 16:43:58 +0200 Subject: [PATCH] fix(holidays): minor improvement to memoization --- src/Utils/Holidays.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Utils/Holidays.hs b/src/Utils/Holidays.hs index 71235acf6..49c140e95 100644 --- a/src/Utils/Holidays.hs +++ b/src/Utils/Holidays.hs @@ -2,7 +2,8 @@ Module: Utils.Holidays Description: German bank holidays -Following module Data.Time.Calendar.BankHoliday.EnglandAndWales +Interfaces follows module Data.Time.Calendar.BankHoliday.EnglandAndWales +isBankHolidayArea uses laziness to provide some simple memoization for a fixed range of years -} module Utils.Holidays ( Feiertagsgebiet(..) @@ -13,7 +14,7 @@ module Utils.Holidays import Import.NoModel -import qualified Data.Set as Set (Set, member, unions) +import qualified Data.Set as Set (Set, member) import qualified Data.Map as Map --import Data.Time.Calendar.WeekDate @@ -112,12 +113,16 @@ isBankHolidayArea land dd = dd `Set.member` holidays holidays | year >= cacheMinYear , year <= cacheMaxYear - , (Just hds) <- Map.lookup land cacheHolidays = hds + , (Just hys) <- Map.lookup land cacheHolidays + , (Just hds) <- Map.lookup year hys = hds | otherwise = bankHolidaysAreaSet land year cacheMinYear, cacheMaxYear :: Integer cacheMinYear = 2020 cacheMaxYear = 2075 -cacheHolidays :: Map.Map Feiertagsgebiet (Set.Set Day) -cacheHolidays = Map.fromList [ (land, Set.unions $ bankHolidaysAreaSet land <$> [cacheMinYear..cacheMaxYear]) | land <- universeF ] +cacheHolidays :: Map.Map Feiertagsgebiet (Map.Map Integer (Set.Set Day)) +cacheHolidays = Map.fromList [(land, Map.fromList + [(year, bankHolidaysAreaSet land year) + | year <- [cacheMinYear..cacheMaxYear]]) + | land <- universeF] \ No newline at end of file