Khi tính toán IO (IO ())
, cả hai (IO ())
và ()
được tính toán, vậy tại sao
main :: IO (IO ())
main = print <$> (print "Hello, World!")
in
"Hello, World!"
không phải
IO "Hello, World!" -- ??
"Hello, World!"
@Redu Điều đó là chính xác, nhưng lưu ý rằng việc gọi
—
chi
print ()
không bao giờ được đánh giá, cũng như hành động của nó được thực hiện (sẽ in ()
trên thiết bị xuất chuẩn). Vì vậy, "gọi print ()
sau ..." là một chút sai lệch (IMO).
fmap print (print "Hello World")
áp dụng tham số đầu tiên của nó,print
hàm, cho kết quả củaprint "Hello World"
. Điều đó chỉ đơn giản là tương đương với việc gọiprint ()
sau khiprint "Hello World"
hành động được thực hiện.