คำถามติดแท็ก haskell

1
IO monad ทางเทคนิคไม่ถูกต้องหรือไม่?
บนวิกิ Haskell มีตัวอย่างต่อไปของการใช้งานตามเงื่อนไขของ IO monad (ดูที่นี่) when :: Bool -> IO () -> IO () when condition action world = if condition then action world else ((), world) โปรดทราบว่าในตัวอย่างนี้คำจำกัดความของIO aถูกนำไปใช้RealWorld -> (a, RealWorld)เพื่อทำให้ทุกอย่างเข้าใจง่ายขึ้น ตัวอย่างนี้เรียกใช้การกระทำใน IO monad แบบมีเงื่อนไข ตอนนี้สมมติว่านั่นconditionคือFalseการกระทำที่actionไม่ควรดำเนินการ ใช้ความหมายสันหลังยาวนี่จะเป็นกรณี อย่างไรก็ตามมีการบันทึกไว้ที่นี่ว่า Haskell พูดถึงเทคนิคที่ไม่เข้มงวด ซึ่งหมายความว่าคอมไพเลอร์ได้รับอนุญาตให้รันaction worldบนเธรดอื่นที่แตกต่างกันและจากนั้นทิ้งการคำนวณนั้นเมื่อพบว่าไม่ได้ต้องการมัน อย่างไรก็ตามตามจุดนั้นผลข้างเคียงจะเกิดขึ้นแล้ว ในตอนนี้เราอาจนำ IO monad ไปใช้ในลักษณะที่ผลข้างเคียงจะแพร่กระจายเมื่อโปรแกรมทั้งหมดเสร็จสิ้นและเรารู้ว่าควรใช้ผลข้างเคียงใด อย่างไรก็ตามนี่ไม่ใช่กรณีเนื่องจากเป็นไปได้ที่จะเขียนโปรแกรมที่ไม่มีที่สิ้นสุดใน …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.