haskell减去错误

use*_*874 0 haskell

answerFalse::Int->IO()
answerFalse hp=do
            hp--
            if hp<=0 then
                putStrLn"================Game Over================"

            else
                print(hp)
Run Code Online (Sandbox Code Playgroud)

我已经将hp声明为int值为3现在我的问题是当我输入"hp--"时,它显示错误

 Couldn't match expected type `IO a0' with actual type `Int'
Run Code Online (Sandbox Code Playgroud)

但如果我把"--hp",结果打印是3而不是2.

我也试过让hp = hp-1,系统卡在那里.

dfl*_*str 6

您无法在Haskell中修改变量.hp++++hp(或hp----hp)不哈斯克尔在所有的工作; --hp编译的原因是--创建一个注释掉部分的注释hp.

你要做的是这样的:

answerFalse hp =
  if hp - 1 <= 0
  then putStrLn "================Game Over================"
  else print hp
Run Code Online (Sandbox Code Playgroud)

你也可以这样做,通过创建一个新的变量:

answerFalse hp = do
  let newHp = hp - 1
  if newHp <= 0
    then putStrLn "================Game Over================"
    else print hp
Run Code Online (Sandbox Code Playgroud)

您需要通过阅读初学者教程来查看您的基本Haskell知识.这个问题为您提供了优质的资源.