* Antoine Latter <[email protected]> [2010-06-13 16:47:28-0500] > On Sun, Jun 13, 2010 at 4:17 PM, Roman Cheplyaka <[email protected]> wrote: > > Suppose I have some parser 'p'. I want to parse it as well as get its > > span in the text. So I could write > > > > \begin{code] > > pWithLocation = do > > loc_start <- getPosition > > pval <- p > > loc_end <- getPosition > > return (pval,loc_start,loc_end) > > \end{code} > > > > except that loc_end gives me the location _after_ 'p'. In case when 'p' > > has consumed trailing newline I see no way to recover the end location > > of 'p' (it is the last column of the previous line). > > > > So, can I do anything with this without patching parsec? > > > > I use parsec3 if it matters. > > > > Can you use a parser which doesn't consume leading/trailing whitespace? > > Or somehow layer the parsers so that the whitepsace munching happens > outside of parseWithLocation.
Of course most parsers don't consume trailing newlines. But I was writing general function to use in many places in the code which would recover the end location. In most cases it just subtracts 1 from the column number, but what if it just happened so that column number is 1? So I got an impression that this way of obtaining the end location is at least ugly. It would be better if there was a function parseWithLocation :: Parser a -> Parser (a, SourcePos, SourcePos) which, I guess, is easy to implement within Parsec without any such hacks. -- Roman I. Cheplyaka :: http://ro-che.info/ "Don't let school get in the way of your education." - Mark Twain _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
