blog/blog-meta/lib/NiceDate.hs

27 lines
742 B
Haskell

module NiceDate (niceDate) where
import Control.Monad.Writer
import Data.Map.Strict qualified as Map
import Data.Monoid
import Misc
import Text.Pandoc.Definition
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