Bei der Berechnung IO (IO ())
werden beide (IO ())
und ()
berechnet, warum also?
main :: IO (IO ())
main = print <$> (print "Hello, World!")
"Hello, World!"
nicht
IO "Hello, World!" -- ??
"Hello, World!"
print ()
nie ausgewertet oder seine Aktion ausgeführt wird (was ()
auf stdout gedruckt würde ). "Aufrufen print ()
nach ..." ist also etwas irreführend (IMO).
fmap print (print "Hello World")
wird der erste Parameter, dieprint
Funktion, auf das Ergebnis von angewendetprint "Hello World"
. Dies entspricht einfach dem Aufrufenprint ()
nach demprint "Hello World"
Ausführen einer Aktion.