Simple.У вас есть куча минусов (int, -> Cons (int, ...)) (похоже), и вы хотите откатиться назад.Смотрите и учитесь, и продумайте это до конца.Когда вы вызываете fn, который делает следующего эльта в списке, вы не хотите называть его прямо, а обрабатывать каждый раз и возвращаться к началу, если это необходимо.Итак, вы пишете, что сначала fn.Затем вы хотите парня, который превратит любого эльта в нового в списке, с новым настроением, которое отправит вас обратно на старт.Итак, вы напишите этого парня следующим (третья строка ниже).Наконец, просто верните ответ.Простой код должен легко следовать (псевдокод; не вполне компилируется и может иметь хакелизмы).
fun cycle l =
let fun handleNext next = ((next()) handle whatever => l);
fun next (Cons(n, fn)) = Cons(n, fun ()=>next(handleNext fn))
in next l end;