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)

Foi útil?

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.

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.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top