Thanks to those who have contributed answers to my questions. I can see how, in a context like
let zs = xs ++ ys
in .... 
with a persistent reference to the concatenation, the spine (not the elements) of xs would have to be copied, because zs might need to be traversed multiple times. But what about something like
f (xs ++ ys)
for a function f that makes a single pass through its argument list (like length or sum)?

--Todd