@@ -278,6 +278,12 @@ reservedOp name = token $ try $
278278 do string name
279279 notFollowedBy (operatorLetter) <?> ("end of " ++ show name)
280280
281+reservedOpFC :: MonadicParsing m => String -> m FC
282+reservedOpFC name = token $ try $ do (FC f (l, c) _) <- getFC
283+ string name
284+ notFollowedBy (operatorLetter) <?> ("end of " ++ show name)
285+ return (FC f (l, c) (l, c + length name))
286+
281287-- | Parses an identifier as a token
282288identifier :: (MonadicParsing m) => m (String, FC)
283289identifier = try(do (i, fc) <-
@@ -303,14 +309,16 @@ maybeWithNS parser ascend bad = do
303309 (x, xs, fc) <- choice (transf (parserNoNS parser : parsersNS parser i))
304310 return (mkName (x, xs), fc)
305311 where parserNoNS :: MonadicParsing m => m (String, FC) -> m (String, String, FC)
306− parserNoNS parser = do (x, fc) <- parser; return (x, "", fc)
312+ parserNoNS parser = do startFC <- getFC
313+ (x, nameFC) <- parser
314+ return (x, "", spanFC startFC nameFC)
307315 parserNS :: MonadicParsing m => m (String, FC) -> String -> m (String, String, FC)
308316 parserNS parser ns = do startFC <- getFC
309317 xs <- string ns
310318 lchar '.'; (x, nameFC) <- parser
311319 return (x, xs, spanFC startFC nameFC)
312320 parsersNS :: MonadicParsing m => m (String, FC) -> String -> [m (String, String, FC)]
313− parsersNS parser i = [try (parserNS parser ns) | ns <- (initsEndAt (=='.') i)]
321+ parsersNS parser i = [try (parserNS parser ns) | ns <- (initsEndAt (=='.') i)]
314322
315323-- | Parses a name
316324name :: IdrisParser (Name, FC)