Haskell'else'解析错误

Ray*_*Ray 3 parsing haskell if-statement

我在输入'else'上有一个解析错误,但我不知道如何解决它.我仍然对这个haskell事情不熟悉.

depot = 
do
putStr ("Enter deposit amount: ")
deAmount <- getLine
let redeAmount = read deAmount
if redeAmount > 0 then 
    let accBal = redeAmount + accBal
    else 
        putStrLn "Please enter amount greater than 0"
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 11

第一个错误是do(以及它之后的所有内容)需要缩进.

下一个错误是语法let accBal = redeAmount + accBal上不能像这样独立.它需要后跟一个in或者它必须直接在一个do块内(if在一个do块内部不在内).

但是,即使您修复了语法,它也无法执行您想要的操作.您不能用于let重新分配变量.事实上,你根本无法重新分配变量.如果你修复了你的语法let,它只会创建一个新变量accBal,它将遮蔽旧变量accBal.该新变量的范围将是then-block if.一旦你离开if-block,无论你在里面做了什么,你accBal都会再次参考旧的值.accBalif

因此,要解决您的问题,您需要重新构建逻辑,因此它不依赖于accBal重新分配.