@@ -67,6 +67,12 @@ instance TokenParsing IdrisParser where
67-- | Generalized monadic parsing constraint type
67-- | Generalized monadic parsing constraint type
68type MonadicParsing m = (DeltaParsing m, LookAheadParsing m, TokenParsing m, Monad m)
68type MonadicParsing m = (DeltaParsing m, LookAheadParsing m, TokenParsing m, Monad m)
70+class HasLastTokenSpan m where
71+ getLastTokenSpan :: m (Maybe FC)
73+instance HasLastTokenSpan IdrisParser where
74+ getLastTokenSpan = lastTokenSpan <$> get
70-- | Helper to run Idris inner parser based stateT parsers
76-- | Helper to run Idris inner parser based stateT parsers
71runparser :: StateT st IdrisInnerParser res -> st -> String -> String -> Result res
77runparser :: StateT st IdrisInnerParser res -> st -> String -> String -> Result res
72runparser p i inputname =
78runparser p i inputname =
@@ -194,21 +200,21 @@ whiteSpace :: MonadicParsing m => m ()
194whiteSpace = Tok.whiteSpace
200whiteSpace = Tok.whiteSpace
196-- | Parses a string literal
202-- | Parses a string literal
197−stringLiteral :: IdrisParser (String, FC)
203+stringLiteral :: (MonadicParsing m, HasLastTokenSpan m) => m (String, FC)
198stringLiteral = do str <- Tok.stringLiteral
204stringLiteral = do str <- Tok.stringLiteral
199− fc <- lastTokenSpan <$> get
205+ fc <- getLastTokenSpan
200 return (str, fromMaybe NoFC fc)
206 return (str, fromMaybe NoFC fc)
202-- | Parses a char literal
208-- | Parses a char literal
203−charLiteral :: IdrisParser (Char, FC)
209+charLiteral :: (MonadicParsing m, HasLastTokenSpan m) => m (Char, FC)
204charLiteral = do ch <- Tok.charLiteral
210charLiteral = do ch <- Tok.charLiteral
205− fc <- lastTokenSpan <$> get
211+ fc <- getLastTokenSpan
206 return (ch, fromMaybe NoFC fc)
212 return (ch, fromMaybe NoFC fc)
208-- | Parses a natural number
214-- | Parses a natural number
209−natural :: IdrisParser (Integer, FC)
215+natural :: (MonadicParsing m, HasLastTokenSpan m) => m (Integer, FC)
210natural = do n <- Tok.natural
216natural = do n <- Tok.natural
211− fc <- lastTokenSpan <$> get
217+ fc <- getLastTokenSpan
212 return (n, fromMaybe NoFC fc)
218 return (n, fromMaybe NoFC fc)
214-- | Parses an integral number
220-- | Parses an integral number
@@ -216,9 +222,9 @@ integer :: MonadicParsing m => m Integer
216integer = Tok.integer
222integer = Tok.integer
218-- | Parses a floating point number
224-- | Parses a floating point number
219−float :: IdrisParser (Double, FC)
225+float :: (MonadicParsing m, HasLastTokenSpan m) => m (Double, FC)
220float = do f <- Tok.double
226float = do f <- Tok.double
221− fc <- lastTokenSpan <$> get
227+ fc <- getLastTokenSpan
222 return (f, fromMaybe NoFC fc)
228 return (f, fromMaybe NoFC fc)
224{- * Symbols, identifiers, names and operators -}
230{- * Symbols, identifiers, names and operators -}