What is the value of a separate `End` token that's emitted before the iterator completes? I would instead just expect the iterator to end.

Given that, I suggest renaming `EndWithError(Error)` to just `ParseError(Error)` and removing `End` entirely. If a consumer sees `ParseError` they know they got an error, and if the iterator ends without emitting that they know it was successful.