One precondition, not the stdlib's next() ⇄ nextNotReady() recursion: hasNext already answers every state, so asking it IS "is there a value".
next()
nextNotReady()