Question

continuations Peut-on dire être monades? Sont-ils un sous-ensemble de monades ou sont-ils simplement une façon de mettre en œuvre monades?

Modifier: Ou peut-être que je me suis trompé et monades est un concept plus abstrait que continuations ? (Donc, je compare vraiment des pommes avec des oranges ici)

Était-ce utile?

La solution

En résumé, étant donné que la « liaison » d'une monade prend une continuation efficace (a lambda du «reste du calcul) comme argument, monades sont des prolongements en ce sens. D'un autre côté, le style passage de continuation peut être efficacement mis en œuvre dans une langue non-CPS à l'aide des sucres de syntaxe monades, comme l'a suggéré un certain nombre de liens misc ci-dessous.

De la 'tout au sujet de monades tutoriel en Haskell:

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

Un F # poursuite monade, utilisé pour mettre en œuvre « pause » et « continuer » pour des boucles de style

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

exemple de l'application d'une poursuite monade à un problème dans F #:

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

Autres conseils

Non seulement continuations monades, mais ils sont une sorte de monade universelle, dans le sens que si vous avez continuations et de l'état, vous pouvez simuler une monade fonctionnelle. Ce résultat impressionnant, mais très technique vient de l'esprit impressionnant et très technique Andrzej Filinski , qui a écrit en 1994 ou à peu près:

  

Nous montrons que toute monade dont l'unité et les opérations d'extension sont exprimable en termes purement fonctionnels peuvent être intégrés dans une langue d'appel par valeur avec « composables continuations ».

Ils peuvent être, bien qu'ils ne doivent pas nécessairement être. Je revenir sur votre question un peu et dire au lieu que les monades sont un moyen de mettre en œuvre continuations. Mais vous pouvez mettre en œuvre continuations de plusieurs façons - vous pouvez faire un fac-similé modeste mais contraint de CPS en C # sans trop d'effort, par exemple . Jetez un oeil à Suite Monad à partir du site Haskell pour un traitement très complet.

A continuation est une fonction particulière dans un programme. Monades sont des constructeurs de type.

Un constructeur de type pour les continuations prendre Cont<T> de type T ne serait pas une monade.

Cependant, une monade est Cont<Cont<T>>, ce qui est ce qu'on appelle communément « la poursuite monade ».

(ayant callcc dans une langue équivaut à pouvoir convertir à <=> <=>).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top