我知道以下"do"表示法的"绑定"功能相当于 getLine >>= \line -> putStrLn
do line <- getLine
putStrLn line
Run Code Online (Sandbox Code Playgroud)
但是以下符号如何等同于绑定函数?
do line1 <- getLine
putStrLn "enter second line"
line2 <- getLine
return (line1,line2)
Run Code Online (Sandbox Code Playgroud) 我正在尝试从其中一个博客中获取一些代码段,然后我注意到以下代码
f :: Int -> [Int]
f x = [1+x,2*x]
test :: IO ()
test = putStrLn . show $ return 5 >>= f >>= f
Run Code Online (Sandbox Code Playgroud)
执行时我正在[7,12,11,20].为什么第二个'f'函数调用不是抛出类型错误?这是List Monad的相关内容吗?