Haskell中每个main的末尾是否都隐藏着“>>return()”?
Is there a hidden ">> return ()" at the end of every main in Haskell?
我怎么会写成这样:
main :: IO ()
main = getLine >>= putStrLn
从 getLine :: IO String
和 putStrLn :: String -> IO String
开始,这个动作的整体类型似乎应该是 IO String
。为什么这个编译而不是给出类型错误?我能想到的唯一原因是在编译时 >> return ()
被添加到 main
的值的末尾。那么这是怎么回事?
实际上,putStrLn :: String -> IO ()
。所以根本没有什么神奇的事情发生。
您也可以通过写
来验证这一点
main :: IO String
main = getLine
并观察到如果 main
.
中插入了隐含的 >> return ()
,这两者 (1) 确实编译并且 (2) 不可能编译
我怎么会写成这样:
main :: IO ()
main = getLine >>= putStrLn
从 getLine :: IO String
和 putStrLn :: String -> IO String
开始,这个动作的整体类型似乎应该是 IO String
。为什么这个编译而不是给出类型错误?我能想到的唯一原因是在编译时 >> return ()
被添加到 main
的值的末尾。那么这是怎么回事?
实际上,putStrLn :: String -> IO ()
。所以根本没有什么神奇的事情发生。
您也可以通过写
来验证这一点main :: IO String
main = getLine
并观察到如果 main
.
>> return ()
,这两者 (1) 确实编译并且 (2) 不可能编译