Basic Iteratees

Takes an element predicate and returns the (possibly empty) prefix of
the stream. None of the characters in the string satisfy the character
predicate.
If the stream is not terminated, the first character of the remaining stream
satisfies the predicate.

Given a sequence of characters, attempt to match them against
the characters on the stream. Return the count of how many
characters matched. The matched characters are removed from the
stream.
For example, if the stream contains abd, then (heads abc)
will remove the characters ab and return 2.

Nested iteratee combinators

Read n elements from a stream and apply the given iteratee to the
stream of the read elements. Unless the stream is terminated early, we
read exactly n elements, even if the iteratee has accepted fewer.

Read n elements from a stream and apply the given iteratee to the
stream of the read elements. If the given iteratee accepted fewer
elements, we stop.
This is the variation of take with the early termination
of processing of the outer stream once the processing of the inner stream
finished early.

N.B. If the inner iteratee finishes early, remaining data within the current
chunk will be dropped.