Вам нужно использовать return :: a -> IO a
, чтобы «поднять» ваши строки в IO String
:
insertValue file x =
if x == "10"
then return "ok"
else do putStrLn "Error"
return file
Но вы уверены, что не хотите звонить putStrLn "ok"
(вместо return "ok"
) и вернуть значение Может быть?В противном случае вы возвращаете file
или "ok"
, и ваш вызывающий никогда не сможет определить, произошла ли ошибка при вызове insertValue
в файле с именем "ok".