У многих языков с неизменяемыми данными есть одна неприятная особенность: если надо поменять что-то в здоровой структуре данных где-то в глубине, приходится тяжко.
Когда надо поменять одно поле в записи, это не страшно: http://stackoverflow.com/questions/14955627/shorthand-way-for-modifying-only-one-field-in-a-record-copy-a-record-changing . Аналогичный синтаксис есть и у Эрланга, и у F#, и наверняка ещё до фига у кого (думаю, у большинства даже).
А вот возможности поменять _одно_ грёбаное поле в середине здорового дерева нет ни у кого... Даже у F#, у которого она просто таки напрашивается, на мой взгляд, из синтаксиса.
Можно конечно всякий раз заливать, что раз, мол, языки функциональные, так пусть все куски, которые требуется менять, и будут функциями, но это не всегда удобно.
Например, (де)сериализация функциональной структуры данных -- геморрой, а если между сериализацией и де сериализацией успел поменяться код, то серьёзный геморрой.
За что такая несправедливость, и чем себя утешить?