Да, правда непонятно, зачем тут цикл нужен. Цикл у нас, увы, пока еще не значение, а чтобы выполнить задачу, которую я выше описал, нужно вызвать одну-единственную функцию.
Стоп. Именно цепочки должно быть можно безопасно зациклить. То есть, это уже уровень повыше монад - цепочки трансформаций. /me пошёл писать папир в CS журнал про новый уровень абстракции.
Это значит с помощью multifire continuations (интересно, можно ли без них) сохранить состояние в a.flatMap, прогнать цепочку, взять сохранённое вычисление и продолжить с вычисленным значением.