函数在Haskell中输入

时间:2013-01-25 09:55:14

标签: haskell io

我是Haskell的新手。我想要一个函数,我使用

从用户那里获得一个Int值
putStr "Please Enter Your Number : "
submit_ans<- getLine

然后在一系列计算之后返回另一个Int,它将被另一个调用它的函数使用。所描述的功能的类型是什么?我应该在最后使用return函数吗?

提前谢谢!

更新#1

好的我更新了以下功能:

myFunction ::  Int -> IO Int 
myFunction action = do

      putStr "\tPlease Enter Your Number : "            
      submit_ans <- getLine 

      if action == 1
        then do 
       myFunctionII read submit_ans  
        else do
       putStrLn("\n")

它给了我这个错误:

*** Term           : myFunction 
*** Type           : Int -> IO Int
*** Does not match : IO a

3 个答案:

答案 0 :(得分:2)

只需将您的函数(g)编写为Int -> Int类型的纯计算。然后在IO monad中使用它作为

...
putStr "Please Enter Your Number : "
submit_ans <- getLine
let i = g (read submit_ans)
...
print i

编辑:任何Haskell值都是纯粹的。功能是纯粹的。 IO x是纯Haskell值。但它描述一个不纯的计算,将由系统运行(例如,当您运行已编译的应用程序时)。作为 执行的一部分,它将执行您的纯函数。

答案 1 :(得分:2)

putStrLn的类型为String -> IO (),似乎myFunctionII的类型为Int -> IO (),因此myFunction的类型应为Int -> IO (),因为这两个分支都是if您的IO ()返回myFunction :: Int -> IO () myFunction action = do putStr "\tPlease Enter Your Number : " submit_ans <- getLine if action == 1 then myFunctionII (read submit_ans) else putStrLn "\n"

{{1}}

答案 2 :(得分:1)

由于您正在执行IO操作并且您要返回Int,所以我的最佳猜测是IO Int,但我无法确定,因为您的问题太模糊,无法清楚地回答。< / p>