Sure the entire input list will need to be consumed, but not every element of the output will need to be determined if we are only taking the top 10.
Laziness enables many compositions to work efficiently, whereas with a strict language, you'd have to fuse the operations to get the same efficiency. More examples here: http://augustss.blogspot.com/2011/05/more-points-for-lazy-ev...