При расчете IO (IO ())
как (IO ())
и так ()
рассчитывается, так почему
main :: IO (IO ())
main = print <$> (print "Hello, World!")
Распечатать
"Hello, World!"
не
IO "Hello, World!" -- ??
"Hello, World!"
@Redu Это правильно, но обратите внимание, что вызов
—
Чи
print ()
никогда не оценивается, и не выполняется его действие (которое будет выводиться ()
на стандартный вывод). Таким образом, «вызов print ()
после ...» немного вводит в заблуждение (ИМО).
fmap print (print "Hello World")
применяет свой первый параметр,print
функцию, к результатуprint "Hello World"
. Это просто эквивалент вызоваprint ()
после выполненияprint "Hello World"
действия.