tl; dr; The jenis adalah abstraksi menyeluruh atas kelanjutan
Kelanjutan adalah jenis input dan outputnya
Hal terdekat yang akan Anda temukan pada kelanjutan berbasis non-prosedur adalah kelanjutan monad di Haskell seperti yang dinyatakan sebagai tipe, di mana banyak fungsi dapat digunakan untuk berinteraksi dengan tipe untuk menyela, melanjutkan, mundur, dan lain-lain.
Anda dapat merangkum penutupan itu dalam suatu jenis seperti Cont
jenis di Haskell di mana Anda mendapatkan abstraksi monad sebagai "abstraksi tingkat yang lebih tinggi", dan ada bentuk abstraksi lain atas kelanjutan yang Anda dapatkan ketika Anda melihat kelanjutan sebagai jenis alih-alih sebagai jenis. hanya sebuah prosedur , misalnya
- Anda dapat mengambil dua kelanjutan dan melakukan alternatif di antara mereka jika tipe mengikuti hukum menjadi monoid
- Anda bisa mengabstraksi tipe untuk mengubah tipe input atau output dari kelanjutan jika Anda merangkum penutupan dalam tipe yang mematuhi hukum dari functor
- Anda dapat secara sewenang-wenang dan sebagian menerapkan atau menghiasi kelanjutan Anda dengan fungsionalitas seperti validasi input atau konversi input jika Anda merangkum penutupan dalam jenis yang mengikuti undang-undang dari aplikator fungsional
Penutupan vs. Prosedur
Pada akhirnya Anda pada dasarnya benar; kelanjutan adalah "prosedur", meskipun saya lebih suka menyebutnya sebagai penutupan. Sering kali kelanjutan diekspresikan dengan baik sebagai penutupan kelas satu yang telah menyertakan lingkungan yang terikat. Dalam bahasa fungsional murni Anda mungkin mengatakan ini tidak masuk akal karena Anda tidak memiliki referensi; ini benar tetapi Anda dapat melampirkan nilai dan tugas tunggal membuat melampirkan nilai vs referensi hal yang sama persis. Ini menimbulkan di Haskell:
(\x -> \y -> insideYIcanAccess x (and y))
Bahasa yang tidak memiliki kemampuan untuk melampirkan lingkungan yang mengikat mungkin secara teknis tidak memiliki penutupan kelas satu, tetapi bahkan kemudian ada beberapa lingkungan (umumnya global) yang tersedia untuk penutupan.
Jadi saya akan mengatakan lebih akurat untuk menggambarkan kelanjutan sebagai: Penutupan yang digunakan dengan cara tertentu.
Kesimpulan
Untuk pertanyaan "Apakah kelanjutan dapat diterapkan dengan cara lain selain prosedur?" Tidak. Jika Anda tidak memiliki fungsi kelas pertama, Anda benar-benar tidak dapat memiliki kelanjutan seperti itu (ya fungsi pointer dapat dihitung sebagai fungsi kelas satu, jadi akses memori sewenang-wenang dapat mencukupi).
Sekarang untuk pertanyaan "Apakah ada cara untuk mengekspresikan kelanjutan dengan cara yang lebih abstrak daripada prosedur?" Mengekspresikannya sebagai tipe memberi Anda abstraksi yang jauh lebih besar, memungkinkan Anda untuk memperlakukan kelanjutan dengan cara yang sangat umum sehingga Anda dapat berinteraksi dengan kelanjutan dalam banyak cara lebih dari sekadar menjalankannya.