@@ -110,6 +110,11 @@ data DEnv = DEnv { docxOptions :: ReaderOptions
110110
111111type DocxContext = ReaderT DEnv (State DState)
112112
113+updateDState :: (DState -> DState) -> DocxContext ()
114+updateDState f = do
115+ st <- get
116+ put $ f st
117+
113118evalDocxContext :: DocxContext a -> DEnv -> DState -> a
114119evalDocxContext ctx env st = evalState (runReaderT ctx env) st
115120
@@ -289,7 +294,7 @@ parPartToInlines (BookMark _ anchor) =
289294 let newAnchor = case anchor `elem` (M.elems anchorMap) of
290295 True -> uniqueIdent [Str anchor] (M.elems anchorMap)
291296 False -> anchor
292− put DState{ docxAnchorMap = M.insert anchor newAnchor anchorMap}
297+ updateDState $ \s -> s { docxAnchorMap = M.insert anchor newAnchor anchorMap}
293298 return [Span (anchor, ["anchor"], []) []]
294299parPartToInlines (Drawing relid) = do
295300 (Docx _ _ _ rels _) <- asks docxDocument
@@ -329,7 +334,7 @@ makeHeaderAnchor (Header n (_, classes, kvs) ils)
329334 do
330335 hdrIDMap <- gets docxAnchorMap
331336 let newIdent = uniqueIdent ils (M.elems hdrIDMap)
332− put DState{docxAnchorMap = M.insert ident newIdent hdrIDMap}
337+ updateDState $ \s -> s {docxAnchorMap = M.insert ident newIdent hdrIDMap}
333338 return $ Header n (newIdent, classes, kvs) (ils \\ (x:xs))
334339-- Otherwise we just give it a name, and register that name (associate
335340-- it with itself.)
@@ -337,7 +342,7 @@ makeHeaderAnchor (Header n (_, classes, kvs) ils) =
337342 do
338343 hdrIDMap <- gets docxAnchorMap
339344 let newIdent = uniqueIdent ils (M.elems hdrIDMap)
340− put DState{docxAnchorMap = M.insert newIdent newIdent hdrIDMap}
345+ updateDState $ \s -> s {docxAnchorMap = M.insert newIdent newIdent hdrIDMap}
341346 return $ Header n (newIdent, classes, kvs) ils
342347makeHeaderAnchor blk = return blk
343348