При расчете 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"действия.