Ничего настолько общего в мои знания не входит. Могу только сказать про монады
State,
ST и (если всё плохо)
IO, но я не вижу, где бы они помогли здесь, и не разбираюсь во второй из них.
Предположим, у меня есть список и по ходу алгоритма я должен его изменить. Предплоложим, что список очень большой и изменяться он будет очень сильно (не просто выкидывание элемента). Предположим, что в ходе алгоритма подобных изменений будет много.
(Всё равно наверняка в данном случае список — не лучший контейнер.)
Какие разумные способы предлагает Haskell кроме как создания на каждом этапе списка с новым именем (тем самым не давая сборщику мусора стереть из памяти старый список).
А что, со старым он обязательно сразу же сотрёт? Вы проверяли? [UPD: А, ну я щас проверил и увидел, что со старым не получится. Видимо, это воспринимается как определение через себя, сразу не понял.] Вообще-то в некоторых случаях GHC выдаёт код, который не создаёт лишних списков (
list fusion).
Да и не только в памяти дело -- чисто эстетически наличие множества имен для посути одной переменной (но изменяемой) выглядит уродски.
А это и не переменная, это всё имена для значений.