Tôi vẫn đang bắt đầu khám phá Haskell. Tôi biết mã này "chạy" trong đơn vị IO
. Khi nó đi từ dòng l <- ...
đến dòng tiếp theo, số IO - bind
được gọi.Tại sao không lười biếng
Người ta có thể nghĩ rằng vì Haskell là lười biếng, l
không bao giờ được đánh giá. Nhưng "bind
" luôn đánh giá lệnh trước đó, đúng không? Bởi vì chương trình tạo ra lỗi "không tìm thấy tệp".
main = do
l <- mapM readFile [ "/tmp/notfound" ]
return()
'l chưa bao giờ được đánh giá' - Hm? Lười biếng không có nghĩa là "không bao giờ", nó có nghĩa là "chưa" hoặc "chỉ khi nó thực sự là cần thiết." –
@RobertHarvey Có, nhưng đối với những người không phải là Haskeller, hãy xem mã nguồn, 'l' không còn được sử dụng nữa. Nhưng nó được sử dụng ngầm, phải không? – Cartesius00