При обчисленні IO (IO ())
і те, (IO ())
і ()
обчислюється, так навіщо
main :: IO (IO ())
main = print <$> (print "Hello, World!")
друк
"Hello, World!"
ні
IO "Hello, World!" -- ??
"Hello, World!"
@Redu Це правильно, але зауважте, що виклик
—
чі
print ()
ніколи не оцінюється, ані його дії виконуються (що було б надруковано ()
у stdout). Отже, "виклик print ()
після ..." трохи вводить в оману (IMO).
fmap print (print "Hello World")
застосовується перший результат,print
функція, до результатуprint "Hello World"
. Це просто еквівалент викликуprint ()
після виконанняprint "Hello World"
дії.