fix(holidays): minor improvement to memoization

This commit is contained in:
Steffen Jost 2021-10-04 16:43:58 +02:00
parent d69cacc027
commit f411fde42d

View File

@ -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]