It seems as if what should happen when
=is called is that all of the nodes should be evaluated, just as when last is called.
Correction: What should happen, ideally, is that nodes should be evaluated until a pair of non-equal nodes is found, at which point false should be returned; otherwise continue until the end of one of the lists is found, and if all nodes so far are equal, check whether one of the lists is longer, in which case return false; otherwise return true. (I assume that this is what = does on regular, non-lazy lists.)