This is essentially the same code as in the Data.Attoparsec
module, only with a parse function that can consume a lazy
ByteString incrementally, and a Result type that does not allow
more input to be fed in. Think of this as suitable for use with a
lazily read file, e.g. via L.readFile or L.hGetContents.

Behind the scenes, strict ByteString values are still used
internally to store parser input and manipulate it efficiently.
High-performance parsers such as string still expect strict
ByteString parameters.

Documentation

The parse failed. The ByteString is the input
that had not yet been consumed when the failure
occurred. The [String] is a list of contexts
in which the error occurred. The String is the
message describing the error, if any.