Al calcular IO (IO ()), ambos (IO ())y ()se calculan, entonces ¿por qué?
main :: IO (IO ())
main = print <$> (print "Hello, World!")
impresión
"Hello, World!"
no
IO "Hello, World!" -- ??
"Hello, World!"
@Redu Eso es correcto, pero tenga en cuenta que la invocación de
—
chi
print ()nunca se evalúa, ni se realiza su acción (que se imprimiría ()en stdout). Entonces, "invocar print ()después de ..." es un poco engañoso (IMO).
fmap print (print "Hello World")aplica su primer parámetro, laprintfunción, al resultado deprint "Hello World". Eso es simplemente el equivalente a invocarprint ()después de realizar unaprint "Hello World"acción.