I see: what matters is that ++ has to traverse to
the end of the first list. The order in which its two arguments
are evaluated is irrelevant.
Thank you, David and Arjun!
Gentlemen, don't forget that Haskell is lazy, and this traversal
takes place only when the list is effectively traversed by a
consumer, which stores everything (and doesn't get rid of elements
read). This might be the case here if somebody wants to keep and use
the "digit representation" of a number, but please do not consider
this phenomenon as inherent to the list creation algorithm.