the data to process
ParseResult with (success, result and rest) or (not success and optional error message)
trying to parse part of the input
import unit_threaded; auto parser = match("test"); auto res = parser.parse("test"); res.success.shouldBeTrue; res.rest.length.shouldEqual(0); res = parser.parse("test1"); res.success.shouldBeTrue; res.rest.shouldEqual("1");
this must be implemented by subclasses