Ebe*_*ley -4 monads haskell types
为什么我会写这样的东西:
main :: IO ()
main = getLine >>= putStrLn
Run Code Online (Sandbox Code Playgroud)
从那以后getLine :: IO String,putStrLn :: String -> IO String似乎这个行动的整体类型应该是IO String.为什么编译而不是给出类型错误?我能想出的唯一原因是在编译时>> return ()添加到值的末尾main.那么这里发生了什么?
Dan*_*ner 10
实际上,putStrLn :: String -> IO ().所以没有任何神奇的事情发生.
您也可以通过写作来验证这一点
main :: IO String
main = getLine
Run Code Online (Sandbox Code Playgroud)
并观察这两个(1)确实编译和(2)如果有一个隐式>> return ()插入,则无法编译main.