on master help sign in
Split span parsing into a type class

This allows a dummy implementation to be provided as a part of the package parser, which re-uses things like the name parser but doesn't have the same token parsing infrastructure.

commit604bde08217db659b844b6f4181f5f412a8bf57d authorDavid Raymond Christiansen <david@davidchristiansen.dk> dateSat 9 May 2015, 13:58 (11 years ago) parentf2d9091
1 file changed+14−8
src/Idris/ParseHelpers.hs+14−8
src/Idris/ParseHelpers.hs+14−8
@@ -67,6 +67,12 @@ instance TokenParsing IdrisParser where
6767-- | Generalized monadic parsing constraint type
6868type MonadicParsing m = (DeltaParsing m, LookAheadParsing m, TokenParsing m, Monad m)
6969
70+class HasLastTokenSpan m where
71+ getLastTokenSpan :: m (Maybe FC)
72+
73+instance HasLastTokenSpan IdrisParser where
74+ getLastTokenSpan = lastTokenSpan <$> get
75+
7076-- | Helper to run Idris inner parser based stateT parsers
7177runparser :: StateT st IdrisInnerParser res -> st -> String -> String -> Result res
7278runparser p i inputname =
@@ -194,21 +200,21 @@ whiteSpace :: MonadicParsing m => m ()
194200whiteSpace = Tok.whiteSpace
195201
196202-- | Parses a string literal
197−stringLiteral :: IdrisParser (String, FC)
203+stringLiteral :: (MonadicParsing m, HasLastTokenSpan m) => m (String, FC)
198204stringLiteral = do str <- Tok.stringLiteral
199− fc <- lastTokenSpan <$> get
205+ fc <- getLastTokenSpan
200206 return (str, fromMaybe NoFC fc)
201207
202208-- | Parses a char literal
203−charLiteral :: IdrisParser (Char, FC)
209+charLiteral :: (MonadicParsing m, HasLastTokenSpan m) => m (Char, FC)
204210charLiteral = do ch <- Tok.charLiteral
205− fc <- lastTokenSpan <$> get
211+ fc <- getLastTokenSpan
206212 return (ch, fromMaybe NoFC fc)
207213
208214-- | Parses a natural number
209−natural :: IdrisParser (Integer, FC)
215+natural :: (MonadicParsing m, HasLastTokenSpan m) => m (Integer, FC)
210216natural = do n <- Tok.natural
211− fc <- lastTokenSpan <$> get
217+ fc <- getLastTokenSpan
212218 return (n, fromMaybe NoFC fc)
213219
214220-- | Parses an integral number
@@ -216,9 +222,9 @@ integer :: MonadicParsing m => m Integer
216222integer = Tok.integer
217223
218224-- | Parses a floating point number
219−float :: IdrisParser (Double, FC)
225+float :: (MonadicParsing m, HasLastTokenSpan m) => m (Double, FC)
220226float = do f <- Tok.double
221− fc <- lastTokenSpan <$> get
227+ fc <- getLastTokenSpan
222228 return (f, fromMaybe NoFC fc)
223229
224230{- * Symbols, identifiers, names and operators -}