Одним из способов решения этой проблемы в чистой среде FP являются монады, такие как в Haskell (например, IO и State), но есть альтернативы, такие как «уникальные типы» (которые допускают только одну ссылку на значение) в Clean.
Здесь не так много grok : если у вас изменчивое состояние, вам нужно каким-то образом ограничить доступ к нему таким образом, чтобы каждое изменение этого состояния было воспринимается как «новая версия» этой структуры от остальной части программы.Например, вы можете думать о IO Хаскелла как о «остальном мире», но с какими-то часами.Если вы что-то делаете с IO, часы тикают, и вы никогда больше не увидите тот же IO.В следующий раз, когда вы прикоснетесь к нему, это будет другой ввод-вывод, другой мир, в котором все, что вы сделали, уже произошло.
В реальной жизни вы можете «видеть», как вещи «меняются» в фильме - это обязательный вид.Но если вы берете фильм, вы видите просто ряд маленьких неизменных картинок, без каких-либо следов «изменений» - это вид FP.Оба представления являются действительными и «истинными» в своем собственном контексте.
Однако, если вы используете Scala, вы можете иметь изменяемое состояние - здесь нет проблем.Scala просто не нуждается в какой-либо специальной обработке для этого, и нет ничего плохого в том, чтобы использовать его (хотя это считается «хорошим стилем», чтобы сохранить «нечистые» пятна как можно меньше).