In Haskell haben wir die IO
-Monade, um mit Nebenwirkungen umzugehen, obwohl es nicht in der Lage ist, Nebenwirkungen auszudrücken, Sie wissen nicht wirklich, welche Art von Nebeneffekt wirklich passiert:
In PureScript haben wir die Eff
-Monade, in der Sie wissen, welche Art von Nebenwirkungen gemäß der Typsignatur auftreten:
Hier ist es klar, dass die Funktion main
das Dateisystem benutzt, Nachrichten an die Konsole zurückverfolgt und mit dem aktuellen Prozess umgehen kann, wo wir ein spezifisches Modul Control.Monad.Eff
für den Umgang mit Nebenwirkungen haben, und Submodule wie Control.Monad.Eff.Random
und Control.Monad.Eff.Console
.
Nehmen Sie als Beispiel Folgendes:
%Vor%Dies ist so viel spezifischer als nur "Hey, hier passiert ein Nebeneffekt, das ist es, nicht mehr, was du wissen musst!" . Ich habe durch das Netz geschaut und ich habe keine Monade gesehen, die vollständig genug ist, um Nebenwirkungen zu verfolgen.
Gibt es in Haskell eine bestimmte Monade wie Eff
, um Nebenwirkungen zu verfolgen?
Vielen Dank im Voraus.
Es gibt einige Bibliotheken, die ähnliche Effektsysteme für Haskell definieren.
Ich habe einige mit extensible-effects
gearbeitet und fand es ziemlich einfach, restricted IO
hinzuzufügen, zB STDIO
, FileIO
, Effekte. Der Mangel an Compiler-Unterstützung ist etwas weniger schön zu verwenden.
Wenn Sie es ausprobieren möchten, können Sie sich von vorhandenen Effekten für das extensible-effects
-Framework inspirieren lassen: Ссылка
Es scheint eine Version von extensible-effects
zu geben, die Typeable
nicht verwendet, um Effekte nachzuverfolgen: Ссылка . Das sollte es schöner machen, neue Effekte zu schreiben.