tl; dr; Типом є головною абстракцією над продовженням
Продовженням є тип його входів та виходів
Найближче, що ви знайдете до непроцедурного продовження, ймовірно, монада продовження в Haskell, оскільки вона виражається як тип, для якого багато функцій можуть використовуватися для взаємодії з типом для переривання, відновлення, зворотного відстеження тощо.
Ви можете інкапсулювати це закриття у такий тип, як Cont
тип у Haskell, де ви отримуєте абстракцію монади як "абстракцію вищого рівня", і існують інші форми абстракції над продовженнями, які ви отримуєте, коли дивитесь на продовження як на тип, а не на просто процедура , наприклад
- Ви можете взяти два продовження і зробити альтернативу між ними, якщо тип дотримується законів, що є моноїдом
- Ви можете абстрагуватися над типом, щоб змінити вхідні або вихідні типи продовження, якщо інкапсулювати закриття у тип, який дотримується законів функтора
- Ви можете довільно та частково застосувати або прикрасити своє продовження з такими функціями, як перевірка введення чи перетворення входу, якщо інкапсулювати закриття типом, який відповідає законам прикладного функтора
Закриття проти процедури
Зрештою, ви в основному праві; продовження - це "процедура", хоча я б швидше вважав це закриттям. Часто тривалість часу найкраще виражається як закриття першого класу, які уклали зв'язане середовище. Чисто функціональною мовою ви можете сказати, що це не особливо розумно, оскільки вам не вистачає посилань; це правда, але ви можете долучити значення, і одне призначення призначає, що додає значення порівняно з посиланням точно те саме. Це породжує Хаскелл:
(\x -> \y -> insideYIcanAccess x (and y))
Мові, якій не вистачає можливості вкласти середовище зв'язування, технічно може не вистачати закриття першого класу, але навіть тоді є якесь середовище (як правило, глобальне), яке доступне для закриття.
Тож я б сказав, що більш точно описати продовження як: Закриття використовується певним чином.
Висновок
На питання "Чи можливе продовження будь-яким іншим способом, крім процедури?" Ні. Якщо у вас немає функцій першого класу, ви дійсно не можете мати продовження як таке (так, покажчики функцій вважаються функціями першого класу, тому альтернативно може бути довільний доступ до пам'яті).
Тепер до питання "Чи є способи висловити продовження більш абстрактним способом, ніж процедура?" Висловлення його як типу дає набагато більшу абстракцію, що дозволяє розглядати продовження дуже загальними способами, щоб ви могли взаємодіяти з продовженням набагато більше способів, ніж просто виконати його.