Wie hilft das Monaden-Konstrukt, Reinheit zu bewahren (in Haskell) und gleichzeitig unreine Dinge zu tun? Wenn Sie zum Beispiel print "Hello"
angeben, führen Sie reinen oder unreinen Code aus? Es ist ein sehr subtiles Detail, aber etwas, das hilft, die Idee von Reinheit und Unreinheit in funktionalen Sprachen besser zu verstehen.
Der Ausdruck
%Vor%ist in der Tat rein. Da nichts gedruckt wird, sondern etwas konstruiert wird, das bei der Ausführung "Hallo" ausgibt.
Hier ist eine Analogie:
Ein Mönch schreibt auf ein Blatt Papier:
%Vor% Können wir den Mönch wegen Ehebruchs beschuldigen, nur weil er eine Anweisung geschrieben hat, Ehebruch zu begehen?Die Frage in stackoverflow kann Ihre Frage beantworten: In welchem Sinne ist die IO Monad rein?
Kurz gesagt, Monade selbst ist rein , kann aber unreine Anweisungen ausgeben. Um etwas genauer zu sein, können Monaden als eine Reihe von zusammensetzbaren Berechnungsbeschreibungen angesehen werden. Einige dieser Berechnungen können schmutzig sein (d. H. Einen Nebeneffekt haben), aber die Beschreibung selbst ist völlig rein und sauber.
Tags und Links haskell functional-programming monads