blog/blog-meta/lib/NiceDate.hs
rhiannon morris 5a94aae932 make less inefficient
- do all filters in one go
- do all post lists in one run of the program
- only write files if they are changed
  (so make repeats less work)
- simplify pandoc command for meta pages
  (this might not actually make a difference)
2024-12-03 20:17:27 +01:00

27 lines
742 B
Haskell

module NiceDate (niceDate) where
import Text.Pandoc.Definition
import qualified Data.Map.Strict as Map
import Misc
import Control.Monad.Writer
import Data.Monoid
niceDate :: Meta -> Meta
niceDate (Meta m) =
let (res', mdate) = run $ Map.alterF reformat' "date" m
res = maybe m (\d -> Map.insert "date-iso" d res') mdate in
Meta res
type T = Writer (Alt Maybe MetaValue)
run :: T a -> (a, Maybe MetaValue)
run = fmap getAlt . runWriter
reformat' :: Maybe MetaValue -> T (Maybe MetaValue)
reformat' Nothing = pure Nothing
reformat' (Just d) = do tell $ pure d; pure $ reformat d
reformat :: MetaValue -> Maybe MetaValue
reformat (toText -> Just txt) =
MetaString . showDate <$> parseIsoDate txt
reformat _ = Nothing