Я сдвинул самый внутренний оператор if
вперед, и он, кажется, компилируется. Я не знаю, соответствует ли это первоначальному замыслу программы.
Также, getLine
возвращает строку, но вы сравниваете вывод с Int
. И ++
- это конкатенация строк, а не +
.
Надеюсь, это поможет. Удачи!
playerMove p e =
if ((getPHealth p) > 0) then
do
putStrLn (showOpts2)
move <- getLine
if (move == "0") then
do
let e = Enemy (getEDescription e) ((getEHealth e) - (getPAttack p)) (getEAttack e)
putStrLn ("you dealt " ++ (getPAttack p) ++ " damage to your foe")
enemyMove p e
if (move == "1") then
do
let p = Player (getPHealth) (getPAttack) (getPScore) True
return p
else return p
else return p
else return p