为什么我能写这样的事:Haskell中每个主体的末尾是否存在隐藏的“>> return()”?
main :: IO()
main = getLine >>= putStrLn
由于getLine :: IO String
和putStrLn :: String -> IO String
它似乎是这一行动的整体类型应该是IO String
。为什么这样编译而不是给出类型错误?我能想出的唯一原因是在编译时>> return()
被添加到main
的值的末尾。那么这里发生了什么?
编号'putStrLn'的类型是String - > IO()',所以你的假设是不正确的。 –
putStrln具有以下类型:'putStrLn :: String - > IO()'。这也是直观正确的,因为我们不期望返回字符串,我们只需要打印到控制台的IO效果。 – madnight