【发布时间】:2015-11-17 11:09:57
【问题描述】:
我有一个关于 Haskell IO 的小问题。我在 haskell 中编程已经有一段时间了,但为了我的爱,我似乎无法完全专注于 I/O。
赋值很简单——从标准输入中读取整数并将它们相乘。到目前为止,这是我所得到的:
mulnum n = do a <- getLine
if a == "" then n else mulnum (n * (read a :: Int))
mulInput :: IO ()
mulInput = print (mulnum 1)
错误:
Couldn't match expected type `IO b' with actual type `Int'
Relevant bindings include
n :: IO b (bound at dayx.hs:8:8)
mulnum :: IO b -> IO b (bound at dayx.hs:8:1)
In the second argument of `(*)', namely `(read a :: Int)'
In the first argument of `mulnum', namely `(n * (read a :: Int))'
In the expression: mulnum (n * (read a :: Int))
我强烈怀疑我从错误的角度看待它,所以如果有人至少能指出我正确的方向,我会非常高兴。
谢谢,祝你有美好的一天!
编辑:
非常感谢您的帮助!这是现在的样子:
mulnum :: Int -> IO Int
mulnum n = do a <- getLine
let a1 = (read a :: Int) in if a == "" then return n else mulnum (n * a1)
mulInput :: IO ()
mulInput = mulnum 1 >>= print
【问题讨论】: