uses self implemented runP to ensure compatibility with old versions of Parsec.