
So... I see no reason why someone can't just do it themselves, but... I was playing around with Parsec (as included in GHC 6.4.1), and I found two functions that are... not quite what I believe they should be. optional :: GenParser tok st a -> GenParser tok st () optional p = do{ p; return ()} <|> return () Now, this completely loses the result of the optional parser. Better would be: optional :: GenParser tok st a -> GenParser tok st (Maybe a) optional p = do{ x <- p; return (Just x) } <|> return Nothing Same thing with manyTill: manyTill :: GenParser tok st a -> GenParser tok st end -> GenParser tok st [a] manyTill p end = scan where scan = do{ end; return [] } <|> do{ x <- p; xs <- scan; return (x:xs) } Better: manyTill :: GenParser tok st a -> GenParser tok st end -> GenParser tok st ([a], end) manyTill p end = scan where scan = do{ endr <- end; return ([], endr) } <|> do{ x <- p; (xs, endr) <- scan; return (x:xs, endr) } Is there any reason I can't see why they are the way they are? JCAB