I think I have an answer.
This is because using seq provides an estimate of the first LazySeq element. Since seq returns nil when the collection and sequence are empty, it must parse the element to solve this.
That is why rest more lazy than next , because (next s) is just (seq (rest s)) .
source share