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

Reply via email to