functional-programming monads continuations

functional programming - ¿Son continuas las mónadas?



functional-programming monads (5)

¿Se puede decir que las continuaciones son mónadas? ¿Son un subconjunto de mónadas o son simplemente una forma de implementar mónadas?

Edit: ¿ O tal vez lo entendí mal y las mónadas son un concepto más abstracto que las continuaciones ? (Así que realmente estoy comparando manzanas con naranjas aquí)


Brevemente, como el "enlace" de una mónada toma una continuación efectiva (una lambda del "resto de la computación") como un argumento, las mónadas son continuaciones en ese sentido. Por otro lado, el estilo de paso de continuación se puede implementar de manera efectiva en un lenguaje que no sea de CPS usando azúcares de sintaxis monádica, como lo sugieren varios enlaces misceláneos a continuación.

Del tutorial de ''todo acerca de las mónadas'' en Haskell:

https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad

Una mónada de continuación F #, utilizada para implementar ''break'' y ''continue'' para for-style-loops

http://cs.hubfs.net/forums/thread/9311.aspx

Y ejemplo de aplicación de una mónada de continuación a un problema en F #:

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!256.entry


No solo son continuas las mónadas, sino que son una especie de mónada universal, en el sentido de que si tienes continuaciones y estados, puedes simular cualquier mónada funcional. Este resultado impresionante pero altamente técnico proviene de la mente impresionante y altamente técnica de Andrzej Filinski , quien escribió en 1994 o más o menos:

Mostramos que cualquier mónada cuyas operaciones de unidad y extensión se puedan expresar como términos puramente funcionales se puede incrustar en un lenguaje de llamada por valor con "continuaciones compuestas".


Pueden ser, aunque no necesitan serlo. Revertiría un poco tu pregunta y diría que las mónadas son una forma de implementar continuaciones. Pero puede implementar continuaciones de muchas maneras: puede hacer un facsímil modesto pero limitado de CPS en C # sin demasiado esfuerzo, por ejemplo . Eche un vistazo a https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad desde el sitio de Haskell para un tratamiento muy completo.



Una continuación es una función particular en un programa. Las mónadas son constructores de tipo.

Un constructor de tipo Cont<T> para las continuaciones que toman el tipo T no sería una mónada.

Sin embargo, Cont<Cont<T>> es una mónada, y esto es lo que comúnmente se llama "la mónada de continuación".

(Tener callcc en un idioma es equivalente a poder convertir de Cont<Cont<T>> a T ).