tl; dr; Il tipo è l'astrazione globale su una continuazione
Una continuazione è il tipo di input e output
La cosa più vicina che troverai in una continuazione non procedurale è probabilmente la monad di continuazione in Haskell come è espresso come un tipo, per il quale molte funzioni possono essere utilizzate per interagire con il tipo di interruzione, ripresa, backtrack, et al.
Puoi incapsulare quella chiusura in un tipo come il tipo Cont
in Haskell in cui ottieni l'astrazione di monade come "astrazione di livello superiore", e ci sono altre forme di astrazione sulle continuazioni che ottieni quando guardi il continuazione come tipo invece di una semplice procedura , ad esempio
- Puoi prendere due continuazioni e fare un'alternativa tra di loro se il tipo segue le leggi per essere un monoid
- Puoi astrarre il tipo per modificare i tipi di input o output della continuazione se incapsuli la chiusura in un tipo che rispetta le leggi di un funtore
- Puoi arbitrariamente e parzialmente applicare o decorare la tua continuazione con funzionalità come la convalida dell'input o la conversione dell'input se incapsuli la chiusura in un tipo che segue le leggi di un functor applicativo
Chiusura contro procedura
Alla fine della giornata hai fondamentalmente ragione; una continuazione è una "procedura", anche se preferirei fare riferimento ad essa come una chiusura. Spesso le continuazioni dei tempi sono meglio espresse come chiusure di prima classe che hanno racchiuso un ambiente vincolato. In un linguaggio puramente funzionale potresti dire che questo non è particolarmente ragionevole perché ti mancano dei riferimenti; questo è vero ma è possibile allegare valori e l'assegnazione singola rende racchiudendo il valore rispetto al riferimento la stessa identica cosa. Questo dà origine a Haskell:
(\x -> \y -> insideYIcanAccess x (and y))
Un linguaggio che non ha la capacità di racchiudere un ambiente vincolante può tecnicamente mancare chiusure di prima classe, ma anche in quel caso c'è un qualche ambiente (generalmente globale) che è disponibile alla chiusura.
Quindi direi che è più accurato descrivere una continuazione come: Una chiusura usata in un modo particolare.
Conclusione
Alla domanda di "Una continuazione è implementabile in un modo diverso da una procedura?" No. Se non hai funzioni di prima classe in realtà non si possono avere continuazioni in quanto tali (sì i puntatori di funzione contano come funzioni di prima classe, quindi l'accesso alla memoria in modo arbitrario può essere sufficiente).
Ora alla domanda di "Esistono modi per esprimere una continuazione in un modo più astratto rispetto a una procedura?" Esprimerlo come tipo ti offre un'astrazione molto più ampia, che ti consente di trattare la continuazione in modi molto generali tali che è possibile interagire con la continuazione in molti più modi rispetto alla semplice esecuzione.