Point of information for this thread: Erlang's iolist are similar (in data structure and complexity) to Haskell's bizarrely named Difference List, which is explained a bit more here:
http://hackage.haskell.org/packages/archive/dlist/0.4.1/doc/...
It's basically a tree, which is efficient (amortized O(1) per element) for many list appends followed by one iteration.