f = do
putStrLn "1"
putStrLn "2"
main = f
我理解f
的方式缩减为(putStrLn "1")>>=(\_ -> (putStrLn "2"))
。应用lambda(提升_出monad)时是否完成了打印操作?有人能解释我哪个部分在哪个阶段被评估和执行?
答案 0 :(得分:1)
putStrLn
的类型为String -> IO ()
,这样,它使运算,然后返回一个()
在IO
单子,麦角,是以第二函数{{1然后丢弃,然后只计算第二个()
。
订单如下:
1.- putStrLn
2-得到putStrLn "1"
作为结果
3.- ()
4.- \() -> putStrLn 2
sintaxis不会那样,但是你要提出一个主意。