i learning haskell , curious following: if add element list in haskell, haskell returns (completely?) new list, , doesn't manipulate original one. now let's have list of million elements , append 1 element @ end. haskell "copy" whole list (1 million elements) , adds element copy? or there neat "trick" going on behind scenes avoid copying whole list? and if there isn't "trick", process of copying large lists not expensive think is? it depends on data structure you're using. if you're using normal haskell lists, these analogous typical linked list implementation in c or c++. structure, appends o(n) complexity, while prepends o(1) complexity. if try append million elements, take o(500000500000) time (o(1) + o(2) + o(3) + ... + o(1000000)) approximately 500000500000 operations. regardless of language you're using, haskell, c, c++, python, java, c#, or assembler. however, if use structure data.sequence.seq , use...