{"action":"closed","issue":{"url":"https://api.github.com/repos/curry-club-aux/curry-club-augsburg.de/issues/37","labels_url":"https://api.github.com/repos/curry-club-aux/curry-club-augsburg.de/issues/37/labels{/name}","comments_url":"https://api.github.com/repos/curry-club-aux/curry-club-augsburg.de/issues/37/comments","events_url":"https://api.github.com/repos/curry-club-aux/curry-club-augsburg.de/issues/37/events","html_url":"https://github.com/curry-club-aux/curry-club-augsburg.de/issues/37","id":113466630,"number":37,"title":"Kurze Erklärung zu Monaden (kurzer Blog-Artikel)","user":{"login":"iblech","id":3661115,"avatar_url":"https://avatars.githubusercontent.com/u/3661115?v=3","gravatar_id":"","url":"https://api.github.com/users/iblech","html_url":"https://github.com/iblech","followers_url":"https://api.github.com/users/iblech/followers","following_url":"https://api.github.com/users/iblech/following{/other_user}","gists_url":"https://api.github.com/users/iblech/gists{/gist_id}","starred_url":"https://api.github.com/users/iblech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iblech/subscriptions","organizations_url":"https://api.github.com/users/iblech/orgs","repos_url":"https://api.github.com/users/iblech/repos","events_url":"https://api.github.com/users/iblech/events{/privacy}","received_events_url":"https://api.github.com/users/iblech/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":{"login":"iblech","id":3661115,"avatar_url":"https://avatars.githubusercontent.com/u/3661115?v=3","gravatar_id":"","url":"https://api.github.com/users/iblech","html_url":"https://github.com/iblech","followers_url":"https://api.github.com/users/iblech/followers","following_url":"https://api.github.com/users/iblech/following{/other_user}","gists_url":"https://api.github.com/users/iblech/gists{/gist_id}","starred_url":"https://api.github.com/users/iblech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iblech/subscriptions","organizations_url":"https://api.github.com/users/iblech/orgs","repos_url":"https://api.github.com/users/iblech/repos","events_url":"https://api.github.com/users/iblech/events{/privacy}","received_events_url":"https://api.github.com/users/iblech/received_events","type":"User","site_admin":false},"milestone":null,"comments":9,"created_at":"2015-10-26T22:41:45Z","updated_at":"2015-11-05T12:40:15Z","closed_at":"2015-11-05T12:40:15Z","body":"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:\r\n\r\n* Ein Wert vom Typ `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 Typ `a` produzieren würde).\r\n* Der Sinn eines Haskell-Programms besteht darin, die Beschreibung einer IO-Aktion `main` festzulegen. Diese wird dann von der Laufzeitumgebung ausgeführt. Andere Beschreibungen werden nicht ausgeführt. Zum Beispiel wird die Auswertung von `seq (putStrLn \"foo\") 42` nichts auf dem Bildschirm ausgeben.\r\n* Beschreibungen von IO-Aktionen kann man mit `>>` und `>>=` bzw. do-Notation miteinander kombinieren. Beispiele für Entzuckerung. Der Operator `>>` ist wie `;` aus anderen Sprachen.\r\n* Wenn man nur veränderlichen Zustand möchte, benötigt man nicht IO. Man muss nur Zustand per Hand durchfädeln. Beispiel. Gründe, wieso das manuell schlecht ist. Dann Abstraktion zur State-Monade.\r\n* Was macht eine Monade aus? Unterstützung von `return` und `>>=`. Warnung vor dem Begriff `return`.\r\n* Allgemeine Kontrollstrukturen wie `forever` oder `replicateM`."}}