Closed iblech closed 8 years ago
+1
Bezeichne es aber besser nicht als Monad Tutorial, sondern vllt. eher als “IO & State Primer”, gerade wegen der Fallacy. Aber eine Definition der Typklasse und Gesetze kann bestimmt auch nicht schaden.
Ein Entwurf ist online. Bitte kritisiert ihn! Verbesserungsvorschläge entweder direkt commiten oder mir schreiben.
Du hast die Monaden super verständlich erklärt und motiviert! Zwei Kleinigkeiten:
Applicative m
eine Voraussetzung für Monad m
. Das ist natürlich nicht so im offiziellen Haskell Standard, aber in der praktischen Definition ist Haskell ja das, was GHC implementiert.Applicative
noch erwähnen? Wenn
ja, stellt sich wieder dieselbe Frage. Übrigens habe ich auch fail
in der Definition weggelassen.Übrigens habe ich auch
fail
in der Definition weggelassen.
fail
ist wie Matrix 2 & 3. Man ignoriert es besser. :p
Applicative
noch erwähnen, fail
ebenso, aber nur kurz darauf eingehen. Eine nette Übungsaufgabe wäre, ap
und liftM
zu implementieren, und so zu zeigen, dass jede Monade auch ein Funktor bzw. Applicative ist.Wir brauchen auch nicht über alle Einsteigerthemen selbst schreiben! Wenn es bereits einen guten (deutschen) Artikel zu einem Thema gibt, so sollten wir diesen einfach verlinken. Bei funktionale-programmierung.de gibt es etwa bereits zwei Artikel, die andere Monaden außer IO
und praktische Einsatzzwecke von Monaden beschreiben.
Kann das hier geschlossen werden? Ein Artikel existiert ja jetzt.
Ja, denke schon. Wenn @timjb oder jemand anderes den Artikel noch ergänzen möchte, ist sie oder er herzlich eingeladen, das zu tun. :-)
Ich assigne mich selbst: Werde morgen oder so ein paar kurze Zeilen zu Monaden schreiben, damit die Teilnehmenden unseres Workshops leichter die Aufgaben des letzten Kapitels bearbeiten können. (Ja, ich kenne die Monad Tutorial Fallacy.) Inhalt soll nur sein:
IO a
ist eine Beschreibung einer IO-Aktion, welche durch die Laufzeitumgebung ausgeführt werden könnte (und dabei dann irgendwelche Nebenwirkungen verursachen und schließlich einen Wert vom Typa
produzieren würde).main
festzulegen. Diese wird dann von der Laufzeitumgebung ausgeführt. Andere Beschreibungen werden nicht ausgeführt. Zum Beispiel wird die Auswertung vonseq (putStrLn "foo") 42
nichts auf dem Bildschirm ausgeben.>>
und>>=
bzw. do-Notation miteinander kombinieren. Beispiele für Entzuckerung. Der Operator>>
ist wie;
aus anderen Sprachen.return
und>>=
. Warnung vor dem Begriffreturn
.forever
oderreplicateM
.