在haskell if-then-else中递归调用main时,会执行多个语句

在haskell if-then-else中递归调用main时,会执行多个语句,haskell,Haskell,这是我的密码 main :: IO () main = do putStr "Enter user name: " userName <- getLine putStr "Enter filename: " fileName <- getLine contents <- readFile fileName --------SOME CODES HERE------------------ putStrLn ("TI

这是我的密码

main :: IO ()  
main = do
    putStr "Enter user name: " 
    userName <- getLine
    putStr "Enter filename: " 
    fileName <- getLine
    contents <- readFile fileName
    --------SOME CODES HERE------------------
    putStrLn ("TITLES AND RATINGS OF FILMS BY " ++ userName)
    -----------SOME CODES HERE-----------------
    putStr "ENTER 'Y' TO SAVE CHANGES AND EXIT: "
    ex <- getChar
    if ex /= 'Y' then
       main     
    else do 
        writeFile fileName (show film')
        exitWith ExitSuccess 
main::IO()
main=do
putStr“输入用户名:”

用户名只读取一个字符。但是您按下了enter键,因此您还输入了一个换行符,当您递归调用
main
时,第一个
getLine
会读取该换行符


只需使用
getLine
而不是
getChar
,并检查它是否为
/=“Y”

getChar
仅读取单个字符。但是您按下了enter键,因此您还输入了一个换行符,当您递归调用
main
时,第一个
getLine
会读取该换行符


只需使用
getLine
而不是
getChar
,并检查它是否为
/=“Y”

在if语句之前打印两个字符串,那么为什么只打印第一个字符串呢?我希望提示会等到我输入用户名后再要求我输入文件名。当if条件为true时,它会在同一行上询问我用户名和文件名。我希望这是清楚的,您在if语句之前打印两个字符串,那么为什么您希望只打印第一个字符串呢?我希望提示会等到我输入用户名后再要求我输入文件名。当if条件为true时,它会在同一行上询问我用户名和文件名。我希望这是清楚的