In Haskell haben wir die IO
Monade mit Nebenwirkungen zu behandeln, obwohl es nicht in der Lage ist, Nebenwirkungen zu verfolgen, Sie nicht wirklich wissen, welche Art von Nebeneffekt wirklich ist Hergang:Monad für die Verfolgung von Nebenwirkungen
main :: IO()
In PURESCRIPT haben wir die Eff
Monade, wo Sie in der Lage sind, zu wissen, welche Art von Nebenwirkungen happen nach der Art Signatur:
main :: forall e. Eff (fs :: FS, trace :: Trace, process :: Process | e) Unit
Hier wird deutlich, dass die main
Funktion verwendet die filesys tem, um Nachrichten an die Konsole zu verfolgen und ist in der Lage, den aktuellen Prozess zu handhaben, wo wir ein spezifisches Modul Control.Monad.Eff
für den Umgang mit Nebenwirkungen und Submodule wie Control.Monad.Eff.Random
und Control.Monad.Eff.Console
haben.
mit gutem Beispiel mit folgendem:
module RandomExample where
import Prelude
import Control.Monad.Eff
import Control.Monad.Eff.Random (random)
import Control.Monad.Eff.Console (print)
printRandom :: forall e. Eff (console :: CONSOLE, random :: RANDOM | e) Unit
printRandom = do
n <- random
print n
Dieses so viel mehr spezifisch ist als die Verwendung von nur „Hey, hier kommt ein Nebeneffekt, das ist es, nicht mehr, dass Sie wissen müssen!“. Ich habe durch das Web geschaut und ich habe keine Monade gesehen, die vollständig genug ist, um Nebenwirkungen zu verfolgen.
Gibt es eine bestimmte Monade in Haskell, wie Eff
, für die Verfolgung von Nebenwirkungen?
Vielen Dank im Voraus.
Nun, es gibt alle Arten von Nebenwirkungen, also was willst du? - Einige von ihnen haben ihre eigenen Monaden (State, ...) und viele Bibliotheken stellen einige mehr vor (Jessod, ...) - aber nein, ich denke du kannst sie nicht zusammenbauen wie in PureScript - normalerweise gibt es Transformatoren und die Monade- Stack-Konzept, dies zu tun – Carsten
Ein kleiner Nitpick: 'IO' hat * Effekte *, keine Nebenwirkungen. Ein Nebeneffekt wäre etwas Böses wie eine Berechnung, die vorgibt, rein zu sein, aber IO über "unsafePerformIO". – Cactus