【发布时间】:2017-11-28 12:48:15
【问题描述】:
f = do
putStrLn "1"
putStrLn "2"
main = f
我理解f 的方式简化为(putStrLn "1")>>=(\_ -> (putStrLn "2"))。应用 lambda 时打印操作是否完成(将 _ 从 monad 中提升)?有人可以解释一下哪个部分在哪个阶段得到评估和执行?
【问题讨论】:
-
IOmonad 是专门为保证副作用动作的评估顺序而设计的。但总的来说,Haskell 并不保证首先计算表达式的哪一部分。唯一的保证是它会尽可能地懒惰。