Frage

Can Fortsetzungen gesagt werden Monaden sein? Sind sie eine Teilmenge von Monaden oder sind sie einfach ein Weg Monaden der Umsetzung?

Edit: Oder vielleicht habe ich es falsch und Monaden ist ein abstraktes Konzept als Fortsetzungen ?

(So bin ich wirklich Äpfel mit Birnen zu vergleichen hier)
War es hilfreich?

Lösung

Kurz gesagt, da der ‚bind‘ ein monadisch eine wirksame Fortsetzung nimmt (eine Lambda des ‚Restes der Berechnung‘) als ein Argument, Monaden sind Fortsetzungen in diesem Sinne. Auf der anderen Seite kann Fortsetzungsübertragungsstil effektiv in einer nicht-CPS Sprache mit monadischen Syntax Zucker umgesetzt werden, wie unten durch eine Reihe von misc Links vorgeschlagen.

Von der 'alles über Monaden' Tutorial in Haskell:

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

Ein F # Fortsetzung Monade, verwendet zu implementieren 'Bruch' und 'Weiter' für für-style-Schleifen

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

Und Beispiel eine Fortsetzung Monade zu einem Problem in F # der Anwendung:

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

Andere Tipps

sind nicht nur Fortsetzungen Monaden, aber sie sind eine Art Universal-Monade, in dem Sinne, dass, wenn Sie Fortsetzungen und Zustand haben, können Sie eine beliebige funktionelle Monade simulieren. Dieses eindrucksvolle, aber sehr technisches Ergebnis kommt von dem beeindruckenden und sehr technischen Geist von Andrzej Filinski , die im Jahr 1994 oder so ungefähr schrieb:

  

Wir zeigen, dass jede Monade, deren Einheit und Erweiterung Operationen ausdrückbar sind als rein funktional mit „zusammensetzbare Fortsetzungen“.

in einer Call-by-Wert Sprache eingebettet werden

Sie können, obwohl sie nicht sein müssen. Ich würde Ihre Frage ein wenig umkehren und sagen stattdessen, dass Monaden sind ein Weg, Fortsetzungen zu implementieren. Aber Sie können Fortsetzungen in vielerlei Hinsicht implementieren - Sie können eine bescheidene tun, sondern beschränkt Faksimile von CPS in C #, ohne zu viel Aufwand, zum Beispiel . Hier finden Sie aktuelle Die Fortsetzung Monade von der Haskell-Website für eine sehr gründliche Behandlung.

Ein sehr schöner Artikel zu diesem Thema: http://blog.sigfpe.com/2008/12/ Mutter-of-all-monads.html

Eine Fortsetzung ist eine bestimmte Funktion in einem Programm. Monaden sind Typkonstruktoren.

Ein Typkonstruktor Cont<T> für Fortsetzungen Typ T nehmen würde eine Monade nicht sein.

Allerdings Cont<Cont<T>> ist eine Monade, und das ist, was gemeinhin als „die Fortsetzung Monade“ genannt wird.

(Mit callcc in einer Sprache entspricht der Lage zu sein, von Cont<Cont<T>> zu T zu konvertieren.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top