Monadische Unreinheit und Haskells Reinheit. Wie sind sie kombiniert?

7

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.

    
Dragno 10.01.2013, 10:31
quelle

2 Antworten

17

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?

    
Ingo 10.01.2013 10:41
quelle
5

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.

    
Hui Zheng 10.01.2013 10:47
quelle