<div dir="ltr">Hi!<br><br>What the other person said - passing an argument should always be "by reference", since there is no danger in doing otherwise.<br>However, "copying" does happen when you deconstruct and reconstruct a value.<br>For example, consider this idList:<br>```<br>idList :: [a] -> [a]<br>idList [] = []<br>idList (x:xs) = x : idList xs<br>```<br>Semantically this is the same as (a stricter) id, but we're deconstructing values and then constructing other ones (putting them in new boxes), so in effect, we're "copying" the input list.<br>I'm not sure if ghc will do some magic optimisation to transform this particular function into an operation with no copying, but you can imagine something more complicated like map/foldr/reverse etc where it isn't possible (although other stuff like fusion is, to eliminate intermediate results from composed maps for example).<br><br>=======<br>Georgi</div>