Interesting question.
So there is a concept in computer science called
fusion.
My understanding (I don't have a CS degree) is that when data is subject to fusion, we don't create the intermediary lists as you are talking about. This is why, in Haskell, we have the
ByteString and
Text datatypes. Unlike
String, they (ByteString / Text) are subject to fusion.
Text is useful when we are dealing with unicode data, while
ByteString is the correct tool when we are dealing with binary data.
I hope this is useful.