On Wed, Aug 8, 2012 at 8:26 PM, silly8888
Inserting a character into the stream can be expensive if for example the stream is a ByteString. I tried the following crazy solution and it seems that it works:
succeed :: Parser () succeed = mkPT $ \st -> return $ Consumed $ return $ Ok () st $ unknownError st
succeed is a parser that always succeeds without really consuming any input but it also resets the error state.
Because you're using the 'Consumed' constructor, you're also telling parsec not the back-track if there any errors following this parsers. This means that 'succeed >> failingParser' won't backtrack, even if 'failingParser' doesn't consume input. Are you using your original parser within a larger parser? Are the error messages also not great? Antoine