IO()和IO有什么区别?

Z.p*_*yyy 1 haskell

IO在haskell程序中有两种不同的使用方法,例如:

main :: IO ()
-- and
readLine :: IO Int
Run Code Online (Sandbox Code Playgroud)

这两者有什么区别?

Mat*_*t S 6

IO ()并且IO Int基本上非常相似. Int并且()都是Haskell中的类型. ()仅在它只有一个值(也表示为())的意义上是特殊的,所以我们从来没有真正对它感兴趣.


Gab*_*lez 5

唯一的区别是他们的回报价值. main返回一个类型的值,()并readLine返回一个Int.也许这个例子会有所帮助:

main = do
    x <- putStrLn "Test"
    print x
Run Code Online (Sandbox Code Playgroud)

当你运行它时,它输出:

>>> main
Test
()
Run Code Online (Sandbox Code Playgroud)

print语句打印一个()因为这是返回值putStrLn:

putStrLn :: String -> IO ()
Run Code Online (Sandbox Code Playgroud)

你通常不绑定某些东西的返回值的原因putStrLn是没有从这样做获得的信息,因为它总是返回()无论如何.