爲什麼我能寫這樣的事: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