@@ -915,7 +915,7 @@ data ParserState = ParserState
915915 stateMeta' :: F Meta, -- ^ Document metadata
916916 stateHeaderTable :: [HeaderType], -- ^ Ordered list of header types used
917917 stateHeaders :: M.Map Inlines String, -- ^ List of headers and ids (used for implicit ref links)
918− stateIdentifiers :: [String], -- ^ List of header identifiers used
918+ stateIdentifiers :: Set.Set String, -- ^ Header identifiers used
919919 stateNextExample :: Int, -- ^ Number of next example
920920 stateExamples :: M.Map String Int, -- ^ Map from example labels to numbers
921921 stateHasChapters :: Bool, -- ^ True if \chapter encountered
@@ -973,8 +973,8 @@ instance HasHeaderMap ParserState where
973973 updateHeaderMap f st = st{ stateHeaders = f $ stateHeaders st }
974974
975975class HasIdentifierList st where
976− extractIdentifierList :: st -> [String]
977− updateIdentifierList :: ([String] -> [String]) -> st -> st
976+ extractIdentifierList :: st -> Set.Set String
977+ updateIdentifierList :: (Set.Set String -> Set.Set String) -> st -> st
978978
979979instance HasIdentifierList ParserState where
980980 extractIdentifierList = stateIdentifiers
@@ -1013,7 +1013,7 @@ defaultParserState =
10131013 stateMeta' = return nullMeta,
10141014 stateHeaderTable = [],
10151015 stateHeaders = M.empty,
1016− stateIdentifiers = [],
1016+ stateIdentifiers = Set.empty,
10171017 stateNextExample = 1,
10181018 stateExamples = M.empty,
10191019 stateHasChapters = False,
@@ -1092,8 +1092,8 @@ registerHeader (ident,classes,kvs) header' = do
10921092 let id'' = if Ext_ascii_identifiers `Set.member` exts
10931093 then catMaybes $ map toAsciiChar id'
10941094 else id'
1095− updateState $ updateIdentifierList $
1096− if id' == id'' then (id' :) else ([id', id''] ++)
1095+ updateState $ updateIdentifierList $ Set.insert id'
1096+ updateState $ updateIdentifierList $ Set.insert id''
10971097 updateState $ updateHeaderMap $ insert' header' id'
10981098 return (id'',classes,kvs)
10991099 else do