Вы, похоже, немного не понимаете, как работает do
-обозначение.
Я дам вам «правильную» версию, и мы можем отработать это:
lp_reqInt = do
input1 <- getLine
let maybeInput = readMaybe input1 :: Maybe Int
if maybeInput == Nothing
then do putStrLn "(integer input required, please try again)"
lp_reqInt
else return $ (\(Just x) -> x) maybeInput
Примечаниеlet
-общение наверху там.Я могу сделать let
-состояние вместо let
- in
-статации здесь, потому что оно находится на верхнем уровне do
-блока.Когда вы написали let output = fromMaybe (...)
, он не был на верхнем уровне do
-блока, который был во второй части if
-статации, следовательно, он не будет работать.
Вы былиполучаю ошибку разбора именно по этой причине: GHC ожидал сопровождающего in
!