什么时候第一次打印发生在下面的haskell代码?

时间:2017-11-28 12:48:16

标签: haskell monads

f = do
    putStrLn "1"
    putStrLn "2"

main = f

我理解f的方式缩减为(putStrLn "1")>>=(\_ -> (putStrLn "2"))。应用lambda(提升_出monad)时是否完成了打印操作?有人能解释我哪个部分在哪个阶段被评估和执行?

1 个答案:

答案 0 :(得分:1)

putStrLn的类型为String -> IO (),这样,它使运算,然后返回一个()IO单子,麦角,是以第二函数{{1然后丢弃,然后只计算第二个()

订单如下:

1.- putStrLn

2-得到putStrLn "1"作为结果

3.- ()

4.- \() -> putStrLn 2

sintaxis不会那样,但是你要提出一个主意。