กำลังพยายามจัดการกับการกระทำของ IO

ฉันกำลังพยายามจัดการกับการกระทำของ IO ฉันสงสัยว่าทำไมสิ่งนี้ถึงใช้งานได้:

main = do
  alias = getLine
  name <- alias
  putStrLn ("your name is: " ++ name)

พูด

 parse error on input `='

person Community    schedule 27.09.2013    source แหล่งที่มา


คำตอบ (1)


เพิ่มคำหลัก let

main = do
  let alias = getLine
  name <- alias
  putStrLn ("your name is: " ++ name)

do เป็นโครงสร้างที่ระบุสำหรับตัวดำเนินการ bind แบบ Monadic ไม่ใช่ cosmic space สิ่งที่คุณเขียนลงในบล็อก do ทั้งหมดนั้นเป็นสายโซ่ของฟังก์ชัน >>= monaidic จริงๆ ดังนั้นคุณควรใช้โครงสร้าง let แต่คุณสามารถสร้างนามแฝงในส่วนอื่นของโปรแกรมของคุณได้

alias = getLine

main = do
  name <- alias
  putStrLn ("your name is: " ++ name)
person Sergey Sosnin    schedule 27.09.2013
comment
+1 สำหรับพื้นที่จักรวาล นี่คือมาตรฐานที่ฉันปรารถนาในโค้ด Haskell ของฉันในอนาคต - person Daniel Wagner; 27.09.2013