2012-07-22 7 views
24

Zurückgehend auf mindestens Ende der 1990er Jahre gab es Leute, die die Integration von restricted monads in Haskell auf freundliche Art und Weise wünschten.Wie ist der aktuelle Status von eingeschränkten Monaden?

Zum Beispiel ohne eingeschränkte Monaden können Sie nicht eine effiziente Monade machen aus Set, Map oder probability distributions. Hier ist ein SO question von vor ein paar Jahren, wo jemand anderes mit diesem Problem in Konflikt geraten ist.

Es gibt verschiedene Abhilfen, dass die Menschen gekommen sind, mit, einschließlich:

Keiner dieser Ansätze scheint jedoch "kanonisch" zu sein. Ich fand 2007 einen Kommentar von Don Stewart über this blog post, in dem er anmerkte, dass wir "sehr nahe" daran waren, Monaden mit einzuschränken.

Was ist der aktuelle Stand? Gibt es jetzt eine "kanonische" Möglichkeit, eingeschränkte Monaden zu machen? Oder wir leben immer noch mit Workarounds?

+12

Ich denke, würde mit Zwang Arten es als kanonisch ist, wie es erhält, sie sind nur ein bisschen zu neu für sie noch die meisten _common_ Lösung. – leftaroundabout

Antwort

11

Es gibt eine kürzlich erschienene Arbeit von Anders Persson, Emil Axelsson und Josef Svenningson, die eine Art und Weise zeigt, auf eingeschränkte Monaden zu kodieren. Ich habe die Details vergessen, aber ich erinnere mich, dass es eine schöne Zeitung war.

Persson, A.; Axelsson, E.; Svenningsson, J. (2011). Generic monadic constructs for embedded languages. IFL 2011, 23. Symposium zur Implementierung und Anwendung funktionaler Sprachen.

+1

Danke Norman. Für alle, die Interesse haben, können Sie eine Kopie der Zeitung von [Josef Svenningsons Homepage] (http://www.cse.chalmers.se/~josefs/) bekommen. –

10

Eigentlich ist es möglich, eine effiziente Set monad als normale Monade, , ohne Einschränkungen zu erhalten. Auf zwei verschiedene Arten. Der folgende Artikel erklärt beide:

http://okmij.org/ftp/Haskell/set-monad.html

Der Artikel weist auch darauf hin, dass eingeschränkte Monaden sind eigentlich ganz beschränkt und viele monadischen Idiome auszuschließen. Ich vermute, dass die Implementierungsmethoden allgemein sind und jede eingeschränkte Monade in die übliche umgewandelt werden kann, ohne Effizienz zu verlieren. So scheint es, , dass wir überhaupt keine eingeschränkten Monaden brauchen.

+0

Ich habe bereits die Idee hinter Ihrer effizienten Set-Monade verwendet, um eine effiziente Wahrscheinlichkeitsverteilungs-Monade zu erstellen (siehe https://github.com/chris-taylor/hs-probability/blob/master/src/Control/Probability/Bayes.hs) .. so danke! Ich habe nicht daran gedacht, das gleiche für andere beschränkte Monaden zu tun, aber ich kann nicht sofort einen Grund sehen, warum es nicht funktionieren würde. –

Verwandte Themen