C чего вы взяли, что в Хаскеле «нет состояния»? С состоянием позволяют работать монады ST, State (трансформер StateT), и, конечно, IO. Это может работать местами менее производительно, без каких-то доп. гарантий, но это полноценная рабочая часть языка — факт. И да, ST и IO вполне можно реализовать на самом Хаскеле.
Вместо изменения значения поля в структуре создается новая структура, дублирующая все поля из старой, кроме поля, которое надо изменить.