#include "head.html"

Monaden mit Null und Plus

Wir verwenden zero und plus mit diesen Definitionen
#include "../src/MonadZero.hs"

#include "../src/MonadPlus.hs"
Wir haben damit außer dem bind (Kleisli-Komposition) eine weitere Operation. Damit wird aus dem Monoid sogar ein Ring. Wir fordern
zero `plus` x = x = x `plus` zero
x `plus` (y `plus z) = (x `plus` y) `plus` z
Offensichtlich
#include "../src/ListMonadPlus.hs"
Aufgabe: erfüllt das nächste die beiden Axiome?
#include "../src/MaybeMonadPlus.hs"
Aufgabe: schreiben einige Axiome (Distributivgesetze) für die vernünftige Zusammenarbeit von bind, zero und plus auf. Prüfe die Gültigkeit für die beiden gegebenen Instanzen.

Die Klassen MonadZero, MonadPlus kann man selbst definieren, wie man will. Die gezeigte Variante war früher mal Standard. Im aktuellen Haskell98 sind die Klassen weiter verschmolzen. Schlecht für die Didaktik, angeblich gut für den Praktiker. Sehen Sie selbst in Prelude.hs und Monad.hs. #include "foot.html"