3
我已經學了Haskell一段時間了,但IO monad卻嚇壞了我。 我有一個代碼IO計算順序
main = do
putStrLn "First computation starts"
let firstResult = foo -- foo is a pure function
putStrLn "Second computation starts"
let secondResult = bar foo -- bar is too pure function
writeFile secondResult
而看到"First computation starts"
"Second computation starts"
然後程序會做。
我知道有絢麗的計算,當writeFile
執行時真的開始計算。 我嘗試添加嚴格
main = do
putStrLn "First computation starts"
let !firstResult = foo -- foo is a pure function
putStrLn "Second computation starts"
let !secondResult = bar foo -- bar is too pure function
writeFile secondResult
什麼也沒有發生
好吧,也許讓表情只是同義詞和由編譯器交換?我試圖把功能集成到IO
main = do
putStrLn "First computation starts"
!firstResult <- return (foo) -- foo is a pure function
putStrLn "Second computation starts"
!secondResult <- return (bar foo) -- bar is too pure function
writeFile secondResult
然而,結果是上面一樣,目前還不清楚我。