Поможет нам, если вы выдадите нам сообщение об ошибке:
/home/dave/tmp/so.hs:14:4:
parse error (possibly incorrect indentation)
Failed, modules loaded: none.
Строка 14: else putStrLn "integer"
Намек, что это связано с отступом, верен.Когда вы используете if-then-else с do-notation, вам нужно убедиться, что многострочные выражения - и if-then-else - это одно выражение - имеют дополнительные отступы после первой строки.
(Вы не используете do-нотацию в своей функции isInteger
, поэтому тот же отступ if-then-else не вызывает там проблем.)
Так что здесь нет ошибок компиляции:
main = do
q <- getLine
let x = read q
if isInteger x == False then putStrLn "not integer"
else putStrLn "integer"
Этого тоже не происходит:
main = do
q <- getLine
let x = read q
if isInteger x == False
then putStrLn "not integer"
else putStrLn "integer"
У вас все еще есть проблема, на которую указывает Эдька.Но, по крайней мере, он компилируется.