@@ -34,7 +34,6 @@ import Data.Void (Void(..))
34import System.FilePath
34import System.FilePath
35import qualified Text.Parser.Char
35import qualified Text.Parser.Char
36import qualified Text.Parser.Combinators
36import qualified Text.Parser.Combinators
37−import qualified Text.Parser.Token as Tok
38import qualified Text.PrettyPrint.ANSI.Leijen as PP
37import qualified Text.PrettyPrint.ANSI.Leijen as PP
39import Text.Megaparsec ((<?>))
38import Text.Megaparsec ((<?>))
40import qualified Text.Megaparsec as P
39import qualified Text.Megaparsec as P
@@ -55,7 +54,7 @@ parseErrorDoc :: ParseError -> PP.Doc
55parseErrorDoc = PP.string . parseErrorPretty
54parseErrorDoc = PP.string . parseErrorPretty
57-- | Generalized monadic parsing constraint type
56-- | Generalized monadic parsing constraint type
58−type MonadicParsing m = (P.MonadParsec Void String m, Tok.TokenParsing m)
57+type MonadicParsing m = (P.MonadParsec Void String m)
60someSpace' :: MonadicParsing m => m ()
59someSpace' :: MonadicParsing m => m ()
61someSpace' = many (simpleWhiteSpace <|> singleLineComment <|> multiLineComment) *> pure ()
60someSpace' = many (simpleWhiteSpace <|> singleLineComment <|> multiLineComment) *> pure ()
@@ -72,7 +71,7 @@ instance Text.Parser.Char.CharParsing IdrisInnerParser where
72 char = P.char
71 char = P.char
73 string = P.string
72 string = P.string
75−tokenFC :: IdrisParser a -> IdrisParser (a, FC)
74+tokenFC :: MonadicParsing m => m a -> m (a, FC)
76tokenFC p = do (FC fn (sl, sc) _) <- getFC --TODO: Update after fixing getFC
75tokenFC p = do (FC fn (sl, sc) _) <- getFC --TODO: Update after fixing getFC
77 -- See Issue #1594
76 -- See Issue #1594
@@ -80,9 +79,8 @@ tokenFC p = do (FC fn (sl, sc) _) <- getFC --TODO: Update after fixing getFC
80 whiteSpace
79 whiteSpace
81 return (r, FC fn (sl, sc) (el, ec))
80 return (r, FC fn (sl, sc) (el, ec))
83−instance {-# OVERLAPPING #-} Tok.TokenParsing IdrisParser where
82+token :: MonadicParsing m => m a -> m a
84− someSpace = someSpace'
85− token p = p <* whiteSpace
83+token p = p <* whiteSpace
87-- | Helper to run Idris inner parser based stateT parsers
85-- | Helper to run Idris inner parser based stateT parsers
88runparser :: StateT st IdrisInnerParser res -> st -> String -> String -> Either ParseError res
86runparser :: StateT st IdrisInnerParser res -> st -> String -> String -> Either ParseError res
@@ -227,7 +225,7 @@ whiteSpace :: MonadicParsing m => m ()
227whiteSpace = someSpace' <|> pure ()
225whiteSpace = someSpace' <|> pure ()
229-- | Parses a string literal
227-- | Parses a string literal
230−stringLiteral :: IdrisParser (String, FC)
228+stringLiteral :: MonadicParsing m => m (String, FC)
231stringLiteral = tokenFC . P.try $ P.char '"' *> P.manyTill P.charLiteral (P.char '"')
229stringLiteral = tokenFC . P.try $ P.char '"' *> P.manyTill P.charLiteral (P.char '"')
233-- | Parses a char literal
231-- | Parses a char literal
@@ -258,7 +256,7 @@ reservedIdentifiers = HS.fromList
260identifierOrReserved :: MonadicParsing m => m String
258identifierOrReserved :: MonadicParsing m => m String
261−identifierOrReserved = Tok.token $ P.try $ do
259+identifierOrReserved = token $ P.try $ do
262 c <- P.satisfy isAlpha <|> P.oneOf "_"
260 c <- P.satisfy isAlpha <|> P.oneOf "_"
263 cs <- P.many (P.satisfy isAlphaNum <|> P.oneOf "_'.")
261 cs <- P.many (P.satisfy isAlphaNum <|> P.oneOf "_'.")
264 return $ c : cs
262 return $ c : cs
@@ -271,12 +269,12 @@ string = P.string
272-- | Parses a character as a token
270-- | Parses a character as a token
273lchar :: MonadicParsing m => Char -> m Char
271lchar :: MonadicParsing m => Char -> m Char
274−lchar = Tok.token . P.char
272+lchar = token . P.char
276-- | Parses a character as a token, returning the source span of the character
274-- | Parses a character as a token, returning the source span of the character
277lcharFC :: MonadicParsing m => Char -> m FC
275lcharFC :: MonadicParsing m => Char -> m FC
278lcharFC ch = do (FC file (l, c) _) <- getFC
276lcharFC ch = do (FC file (l, c) _) <- getFC
279− _ <- Tok.token (P.char ch)
277+ _ <- token (P.char ch)
280 return $ FC file (l, c) (l, c+1)
278 return $ FC file (l, c) (l, c+1)
282symbol :: MonadicParsing m => String -> m ()
280symbol :: MonadicParsing m => String -> m ()
@@ -289,7 +287,7 @@ symbolFC str = do (FC file (l, c) _) <- getFC
290-- | Parses a reserved identifier
288-- | Parses a reserved identifier
291reserved :: MonadicParsing m => String -> m ()
289reserved :: MonadicParsing m => String -> m ()
292−reserved name = Tok.token $ P.try $ do
290+reserved name = token $ P.try $ do
293 P.string name
291 P.string name
294 P.notFollowedBy (P.satisfy isAlphaNum <|> P.oneOf "_'.") <?> "end of " ++ name
292 P.notFollowedBy (P.satisfy isAlphaNum <|> P.oneOf "_'.") <?> "end of " ++ name
@@ -307,7 +305,7 @@ reservedHL str = reservedFC str >>= flip highlightP AnnKeyword
307-- Taken from Parsec (c) Daan Leijen 1999-2001, (c) Paolo Martini 2007
305-- Taken from Parsec (c) Daan Leijen 1999-2001, (c) Paolo Martini 2007
308-- | Parses a reserved operator
306-- | Parses a reserved operator
309reservedOp :: MonadicParsing m => String -> m ()
307reservedOp :: MonadicParsing m => String -> m ()
310−reservedOp name = Tok.token $ P.try $
308+reservedOp name = token $ P.try $
311 do string name
309 do string name
312 P.notFollowedBy operatorLetter <?> ("end of " ++ show name)
310 P.notFollowedBy operatorLetter <?> ("end of " ++ show name)
@@ -403,7 +401,7 @@ invalidOperators = [":", "=>", "->", "<-", "=", "?=", "|", "**", "==>", "\\", "%
404-- | Parses an operator
402-- | Parses an operator
405symbolicOperator :: MonadicParsing m => m String
403symbolicOperator :: MonadicParsing m => m String
406−symbolicOperator = do op <- Tok.token . some $ operatorLetter
404+symbolicOperator = do op <- token . some $ operatorLetter
407 when (op `elem` (invalidOperators ++ commentMarkers)) $
405 when (op `elem` (invalidOperators ++ commentMarkers)) $
408 fail $ op ++ " is not a valid operator"
406 fail $ op ++ " is not a valid operator"
409 return op
407 return op