tl; dr; O tipo é a abstração abrangente em uma continuação
Uma continuação é o tipo de suas entradas e saídas
A coisa mais próxima que você encontrará de uma continuação não baseada em procedimentos é provavelmente a mônada de continuação em Haskell , pois é expressa como um tipo, para o qual muitas funções podem ser usadas para interagir com o tipo de interrupção, retomada, retorno, etc.
Você pode encapsular esse fechamento em um tipo como o Cont
tipo em Haskell, onde você obtém a abstração de mônada como uma "abstração de nível superior", e existem outras formas de abstração nas continuações que você obtém quando vê a continuação como um tipo, em vez de simplesmente um procedimento , por exemplo
- Você pode fazer duas continuações e fazer uma alternativa entre elas se o tipo seguir as leis para ser um monóide
- Você pode abstrair sobre o tipo para alterar os tipos de entrada ou saída da continuação se você encapsular o fechamento em um tipo que cumpra as leis de um functor
- Você pode aplicar ou decorar arbitrariamente e parcialmente sua continuação com funcionalidades como validação de entrada ou conversão de entrada se encapsular o fechamento de um tipo que siga as leis de um functor aplicador
Encerramento x Procedimento
No final do dia, você está basicamente certo; uma continuação é um "procedimento", embora eu prefira me referir a ele como um encerramento. Muitas vezes, as continuações são melhor expressas como fechamentos de primeira classe que encerram um ambiente vinculado. Em uma linguagem funcional pura, você pode dizer que isso não é particularmente razoável porque lhe faltam referências; isso é verdade, mas você pode incluir valores e a atribuição única faz com que o valor e a referência sejam exatamente a mesma coisa. Isso dá origem a Haskell:
(\x -> \y -> insideYIcanAccess x (and y))
Um idioma que carece da capacidade de incluir um ambiente vinculativo pode tecnicamente carecer de fechamentos de primeira classe, mas mesmo assim há algum ambiente (geralmente o global) disponível para o fechamento.
Então, eu diria que é mais preciso descrever uma continuação como: Um fechamento sendo usado de uma maneira específica.
Conclusão
Para a pergunta "Uma continuação é implementável de alguma maneira que não seja um procedimento?" Não. Se você não possui funções de primeira classe, não pode ter continuações como tal (sim, os ponteiros de função contam como funções de primeira classe, portanto, alternativamente, o acesso arbitrário à memória pode ser suficiente).
Agora, para a pergunta "Existe alguma maneira de expressar uma continuação de uma maneira mais abstrata do que um procedimento?" Expressá-lo como um tipo fornece uma abstração muito maior, permitindo tratar a continuação de maneiras muito gerais, de modo que você possa interagir com a continuação de muitas outras maneiras além de executá-la.