On Wed, Feb 18, 2004 at 02:45:15PM +0100, Daan Leijen wrote:
On Wed, 18 Feb 2004 01:11:31 -0500, Andrew Pimlott <andrew@pimlott.net> wrote:
After some pondering and fiddling, a version I like:
notFollowedBy' :: Show a => GenParser tok st a -> GenParser tok st () notFollowedBy' p = join $ do a <- try p; return (unexpected (show a)) <|> return (return ())
Argh, there is still a problem! When notFollowedBy' fails, it will have consumed whatever p consumed. Stupid example: ab = do char 'a' (notFollowedBy' $ do char 'b'; char 'c') <|> do char 'b'; return () *Main> parseTest ab "abcd" parse error at (line 1, column 4): unexpected 'c' Last version: notFollowedBy' :: Show a => GenParser tok st a -> GenParser tok st () notFollowedBy' p = try $ join $ do a <- try p return (unexpected (show a)) <|> return (return ()) Try, try again, Andrew