we need some way to do recursive parsers, and mutually recursive parsers.
the best i've come up with is labelling a parser with label and then referencing it with use
$parser = p::label("foo",p::block(p::lit("foo"),p::lit("bar"),p::use("foo");
this parser would parse "foofoobarbar" but "foofoobar" would give an error.