There is this thread and this article.

It’s a bit old, but it is being posted and retweeted regurarly. You read it, and… you know, you see the point, but something is not right with it.

It turns out that our purely functional rendering code is sensitive to ordering in non-obvious ways. The first time I encountered this kind of bug, it felt strangely familiar – it’s something that often occurs in imperative programs. This is exactly the kind of problem that functional programming was supposed to help us avoid!

There is a quite good reaction on Reddit. I couldn’t react more accurate:

Moving the character and collision detection should not be two separate function that affect the state but that can be called separately (or in the wrong order) and keep the system in an incorrect state. Only the code responsible for modifying the state should do so, and it should guarantee to leave it in a correct state on returning. Moving without collision detection can leave the system in an incorrect state and thus should not even be a function that exists.

However, the moral of the story is right:

After experiencing the kinds of bugs I described above, it became clear to me that – despite their merits – immutable data structures are not a silver bullet.

Of course. Software systems can be too complex to solve most of complexity related problems with one simple concept like immutability.