我是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
答案 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>