История изменений
Исправление AndreyKl, (текущая версия) :
Вообще говоря, самый наверное безгеморойный способ - это написать монадическое окружение по типу вот такого
https://stackoverflow.com/questions/32504352/imperative-loop-in-haskell
https://hackage.haskell.org/package/monad-loops-0.4.3/docs/Control-Monad-Loop...
(я думаю ты знаком).
И тогда можно писать прям как в императивных языках, т.е. ни на что внимания не обращать.
Но при запуске всего этого дела (runMonad когда будет вызываться), надо будет в этот ран монад добавить число шагов просто заведомо большее чем ожидаемое число шагов. И всё будет работать. А там уже доказывать что всё завершиться за конечное число шагов, как отдельная задачка.
Исходная версия AndreyKl, :
Вообще говоря, самый наверное безгеморойный способ - это написать монадическое окружение по типу вот такого
https://stackoverflow.com/questions/32504352/imperative-loop-in-haskell
https://hackage.haskell.org/package/monad-loops-0.4.3/docs/Control-Monad-Loop...
(я думаю ты знаком).
И тогда можно писать прям как в императивных языках, т.е. ни на что внимания не обращать.
Но при запуске всего этого дела (runMonad когда будет вызываться), надо будет в этот ран монад добавить число шагов просто заведомо большее чем ожидаемое число шагов. И всё будет работать.