Stephen Tetley wrote: > Malcolm Wallace describes a commit combinator in the paper "Partial > parsing: combining choice with commitment" which sounds like what you > would want. It is implemented for Polyparse rather than Parsec though.
Yes, I can see how that might help on some kinds of data. Thanks. > If your Parsec parser uses try because it is not especially > left-factored, one extra combinator I have found useful for > left-factoring on the cheap is optionalSuffix: > > optionalSuffix :: (a -> c) -> (a -> b -> c) -> Parser a -> Parser b -> > Parser c > optionalSuffix f g pbody psuffix = do > a <- pbody > mb_b <- optionMaybe psuffix > return $ maybe (f a) (\b -> g a b) mb_b Funnily enough, while this function didn't help me directly, it did inspire me to take yet another look at the problem code (I've made at least 4 or 5 attempts to fix it over the last year). Revisiting the problem now, with your code in mind, I came up with a solution in about 5 minutes. Now that I've fixed it, it seems so obvious. That led me to wonder if there was a Parsec best-practices document. Does such a thing exist? Cheers, Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/ _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
