import Text.Pandoc.Definition import qualified Data.Map.Strict as Map import Text.Pandoc.JSON import Data.Text (Text) import Misc main :: IO () main = toJSONFilter \(Pandoc (Meta m) body) -> do m' <- Map.alterF addSlugs "tags" m pure $ Pandoc (Meta m') body addSlugs :: Maybe MetaValue -> IO (Maybe MetaValue) addSlugs Nothing = pure Nothing addSlugs (Just (toTextList -> Just tags)) = pure $ Just $ MetaList $ map addSlug1 tags addSlugs (Just t) = fail $ "'tags' is\n" <> show t <> "\nwanted a list of strings" addSlug1 :: Text -> MetaValue addSlug1 tag = MetaMap $ Map.fromList [("name", MetaString tag), ("slug", MetaString $ makeSlug tag)]