[Haskell-cafe] In-place modification

Andrew Coppin andrewcoppin at btinternet.com
Sun Jul 8 13:40:15 EDT 2007

I was wittering on about stream fusion and how great it is, and I got a 
message from Mr C++.

(Mr C++ develops commercial games, and is obsessed with performance. For 
him, the only way to achieve the best performance is to have total 
control over every minute detail of the implementation. He sees Haskell 
is a stupid language that can never be fast. It seems he's not alone...)

He said two things. The first was "it really perplexes me that Haskell 
insists that everything must be read-only". Naturally, I have a good 
answer to that one. (It's like being "perplexed" that relational 
databases refuse to keep table data in the same order. It's not to be 
awkward, it is a fundamental and important properly of the underlying 
theoretical foundation - the relational algebra, et al.)

He also said what basically boils down to "being able to swap elements 
around in O(1) time and O(0) space is the whole thing that makes linked 
lists useful in the first place; take that away and it's rather 
pointless". I don't really have an answer to that one. (Lazyness and GC 
is probably going to kill most of the space cost. There's still a time 
cost - particularly the extra GC time...)

I've asked this before and nobody answered, so I take it that nobody 
knows the answer... Does GHC *ever* do an in-place update on anything? 
Does the STG even have a command for that? I always assumed that the 
compiler tried to find instances where a new structure is created and 
the old one is no longer referenced, and make that be in-place. But now 
I'm not so sure...

More information about the Haskell-Cafe mailing list