我想猜一个数字游戏。
`
main :: IO()
checkGuess :: (Integral a) => a -> Bool
checkGuess b = if b == 9 then return True
main = do
print "Guess the number?"
guess <- getLine
checkGuess guess
Run Code Online (Sandbox Code Playgroud)
但是我在功能checkGuess的输入'::'上得到解析错误
这里有几处错误:
where子句);checkGuess应该返回a Bool,但是通过return True它,您可以返回a Monad m => m Bool;if ... then ... else ...没有else确实不存在。这是合乎逻辑的,因为函数应始终返回某些内容。getLine具有as类型IO String,因此guess具有type String,而不是Int,Integer因此不能guess直接用于与数字进行比较;和print此处可能应该是putStrLn,因为否则我们将打印字符串文字,而不是字符串内容。通常,您似乎正在用(纯)函数语言编写命令式程序。快速修复如下:
checkGuess :: (Eq a, Num a) => a -> Bool
checkGuess = (9 ==)
main :: IO()
main = do
putStrLn "Guess the number?"
guess <- readLn :: IO Int
print (checkGuess guess)Run Code Online (Sandbox Code Playgroud)