Haskell:与Ints的IO混淆

时间:2013-03-09 09:09:26

标签: haskell io int

嘿所以我正在努力学习haskell并且我在编写一个程序时遇到麻烦,该程序要求我从终端中的用户收集Int。我怎么做这个我尝试过这样的事情

import Data.Char (digitToInt)


getArguments :: IO Int
getArguments =
    do putStrLn "Enter the number of arguments you want to have"
       arguments <- getChar
       return (digitToInt arguments)


main :: IO()
main = do
    putStrLn "Welcome to Random Argument Generator"
    let x = getArguments
    print x+1

但这不起作用plz help!

1 个答案:

答案 0 :(得分:6)

let x = getArguments替换为x <- getArguments

getArguments的类型签名是(正确):: IO Int,这意味着Int被包裹了#{1}}在IO monad中,这意味着你必须使用val <- func语法来解包它。

如果 getArguments是纯函数(:: Int),则let语法就是正确的。