Что такое продолжение Scala и зачем их использовать?

Я только что закончилПрограммирование в Scalaи я изучал изменения между Scala 2.7 и 2.8. Наиболее важным является плагин для продолжения, но я не понимаю, для чего он полезен или как он работает. Я видел, что это хорошо для асинхронного ввода-вывода, но я не смог выяснить, почему. Вот некоторые из наиболее популярных ресурсов по этому вопросу:

Разграниченные продолжения и ScalaПерейти в СкалаВкус 2,8: продолжениеОбъясненные продолжения объяснены (в Scala)

И этот вопрос о переполнении стека:

Каковы самые большие различия между Scala 2.8 и Scala 2.7?

К сожалению, ни одна из этих ссылок не пытается определить, для чего предназначены продолжения или что должны делать функции сдвига / сброса, и я не нашел никаких ссылок, которые бы это делали. Я не смог догадаться, как работает какой-либо из примеров в связанных статьях (или что они делают), поэтому одним из способов помочь мне было бы построчно просмотреть один из этих примеров. Даже этот простой из третьей статьи:

reset {
    ...
    shift { k: (Int=>Int) =>  // The continuation k will be the '_ + 1' below.
        k(7)
    } + 1
}
// Result: 8

Почему результат 8? Это, вероятно, поможет мне начать.

Ответы на вопрос(6)

Ваш ответ на вопрос