In Haskell ist eines der Dinge, die ich ziemlich schön finde, die Verwendung von Monaden als Abstraktion über wirkungsvolle Aktionen. Es schafft eine wirklich elegante Möglichkeit, imperativen Code auszudrücken, und erlaubt auch, dass mächtige Dinge mit Garantien für Korrektheit passieren.IO Monade in dynamisch typisierten Sprachen
Die IO-Monade scheint nicht spezifisch für stark typisierte Sprachen zu sein. Insbesondere scheint es mir nicht schwierig oder revolutionär zu sein, die IO-Monade in einer dynamisch typisierten Sprache zu implementieren. Es wäre dann nur notwendig, die Sprache so zu beschränken, dass alle IO-Aktionen lediglich Aktionen in der IO-Monade erzeugen.
Das gesagt, habe ich keine Sprachen gesehen (vielleicht bin ich einfach nicht hart genug suchen), die dynamisch typisiert sind, aber Nebenwirkungen mit Monaden isolieren. Gibt es einen Grund, warum das so ist? (Oder gibt es sie?)
Okay, das macht sehr viel Sinn. Ein Laufzeit-getaggtes IO-System in einer dynamischen Sprache ist das, woran ich dachte (obwohl ich dachte, dass es die Monaden-Kombinatoren verwenden würde). Ich wusste nicht, dass es andere Typen von Kombinatoren für getippte IO-Aktionen gab. Hast du irgendwelche Beispiele? – Mystor
Nun, Clean verwendet zum Beispiel ein System, das auf Eindeutigkeitstypen für IO basiert. Ich denke, Sie werden wahrscheinlich feststellen, dass jede Abstraktion, die für typisierte IO funktioniert, in etwa äquivalent zu monadischen Kombinatoren ist. Mein wirklicher Punkt war, dass diese Kombinatoren nicht der spezielle Teil des IO-Typs sind. Sie sind nur bequeme Plumbing-Operatoren und zufällig etwas, das in Haskells Typ-System polymorph definiert werden kann. – Carl