Я читаю некоторые хитрости для манипулирования списками, и он содержит следующее:
zipRev xs ys = foldr f id xs snd (ys,[]) where f x k c = k (\((y:ys),r) -> c (ys,(x,y):r))
Здесь мы можем видеть, что у нас есть два продолжения, сложенных друг на друга. Когда это происходит, они часто могут "отменить", например так:
zipRev xs ys = snd (foldr f (ys,[]) xs) where f x (y:ys,r) = (ys,(x,y):r)
Я не понимаю, как вы "отменяете" сложенные продолжения, чтобы перейти от верхнего блока кода к нижнему. Какой шаблон вы ищете, чтобы сделать это преобразование, и почему оно работает?