São continuações mônadas?
-
21-08-2019 - |
Pergunta
continuações podem ser dito ser mônadas? Eles são um subconjunto de mônadas ou são simplesmente uma maneira de implementar mônadas?
Editar: Ou talvez eu entendi errado e monads é um conceito mais abstrato do que continuações ? (Então, eu estou realmente comparar maçãs com laranjas aqui)
Solução
Resumidamente, uma vez que o 'bind' de uma mônada tem uma continuação eficaz (a lambda do 'resto da computação') como um argumento, mônadas são continuações nesse sentido. Por outro lado, a continuação de passagem de estilo pode ser efetivamente implementado em uma linguagem não-CPS utilizando açúcares sintaxe monádicas, como sugerido por uma série de links variados abaixo.
A partir do 'tudo sobre mônadas' tutorial em Haskell:
https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad
Um F # continuação mônada, usado para implementar 'break' e 'continuar' para para-style-laços
http://cs.hubfs.net/forums/thread/9311.aspx
E exemplo de aplicação de uma mônada continuação a um problema no F #:
http://lorgonblog.spaces.live.com/blog /cns!701679AD17B6D310!256.entry
Outras dicas
Não só são continuações mônadas, mas eles são uma espécie de mônada universal, no sentido de que se você tiver continuações e estado, você pode simular qualquer mônada funcional. Este resultado impressionante, mas altamente técnica vem da mente impressionante e altamente técnico da Andrzej Filinski , que escreveu em 1994 ou por aí:
Mostramos que qualquer mônada cujas operações unitárias e de extensão são expresso como termos puramente funcionais pode ser incorporado em uma linguagem chamada por valor com “continuações componíveis”.
Eles podem ser, embora eles não precisam ser. Eu inverter a sua pergunta um pouco e dizer vez que mônadas são uma forma de implementar continuações. Mas você pode implementar continuações de muitas maneiras - você pode fazer um fac-símile modesta mas limitado de CPS em C # sem muito esforço, por exemplo . Ter um olhar para Mônada do site A continuação do Haskell para um tratamento muito completo.
Um artigo muito bom sobre o assunto: http://blog.sigfpe.com/2008/12/ mother-of-all-monads.html
A continuação é uma função específica em um programa. Mônadas são do tipo construtores.
Um tipo Cont<T>
construtor para continuações tomando tipo T
não seria uma mônada.
No entanto, Cont<Cont<T>>
é uma mônada, e isso é o que é comumente chamado de "a mônada continuação".
(Ter callcc em uma linguagem é equivalente a ser capaz de converter de Cont<Cont<T>>
para T
.)