Add char combinator to ListParser

`parseWithType(_.headOption.toSuccess(()), "Not a char")` is closer to what I meant.

But you could equally pull out a combinator `def parseAttempt[A](p: String => Option[A], annotation: String): Parser[A]` and then just do `parseAttempt(_.headOption, "Not a char")`.