"the pure function" always comes at the cost of infinite copying of data
just watch a haskell compilation sometimes with a system monitor open to see just how much memory it uses (and then discards)
this is why #golang uses a lot of functional concepts but discards forcing you to avoid pointers, and it's a delicate compromise because pure functions are without race conditions and this is another goal of Go - enabling concurrent processing
for good reason if certain operations happen concurrently on a single piece of data the go runtime kills everything and i am glad they make it that way because races are the most elusive bugs there is