输入"let"时Haskell解析错误

Bob*_*bys 0 haskell

我试图运行此代码,但我在输入'let'上得到一个解析错误:

 let database = tempFilm:database
Run Code Online (Sandbox Code Playgroud)

我找不到问题所在,你能看一下吗?

options 7 (username, database) = do   putStrLn "******************"
                                      putStrLn "   Rate a film    "
                                      putStrLn "******************"
                                      putStrLn ""
                                      putStr "Enter the title of the film or nothing to return to the main menu: "
                                      title <- getLine
                                      if title == ""
                                        then return(username, database)
                                      else do let filmCheck = findFilm title database
                                              if filmCheck == []
                                                then do putStrLn "That film does not exists."
                                                        return (username, database) 
                                                else do putStr "Enter your rate: "
                                                        tempRate <- getLine
                                                        case reads tempRate :: [(Integer, String)] of
                                                             [(n, "")] -> do let rate = read tempRate :: Int
                                                                             let tempFilm = rateFilm username (username, rate) filmCheck
                                                                             if checkIfRated username tempFilm == True 
                                                                              then do putStrLn "You already voted for this film\n"
                                                                                      putStrLn "Do you want to modify your voted?\n"
                                                                                      putStrLn "Press y to modify or nothing to return to the main menu:"
                                                                                      input <- getLine
                                                                                      if input /= "y"
                                                                                        then return (username, database)
                                                                                      else putStrLn "Your vote will be modified."
                                                                             let database = tempFilm:database
                                                                             putStrLn "You rating has been  sumbited successfully!"
                                                                             putStrLn (displayFilm tempFilm)
                                                                             return (username, database) 
Run Code Online (Sandbox Code Playgroud)

编辑: 使用时间

options 7 (username, database) = do   putStrLn "******************"
                                      putStrLn "   Rate a film    "
                                      putStrLn "******************"
                                      putStrLn ""
                                      putStr "Enter the title of the film or nothing to return to the main menu: "
                                      title <- getLine
                                      if title == ""
                                        then return(username, database)
                                      else do let filmCheck = findFilm title database
                                              if filmCheck == []
                                                then do putStrLn "That film does not exists."
                                                        return (username, database) 
                                                else do putStr "Enter your rate: "
                                                        tempRate <- getLine
                                                        case reads tempRate :: [(Integer, String)] of
                                                             [(n, "")] -> do let rate = read tempRate :: Int
                                                                             let tempFilm = rateFilm username (username, rate) filmCheck
                                                                             when (checkIfRated username tempFilm == True) $
                                                                                 do putStrLn "You already voted for this film\n"
                                                                                    putStrLn "Do you want to modify your vote?\n"
                                                                                    putStrLn "Press y to modify or nothing to return to the main menu:"
                                                                                    input <- getLine
                                                                                    if input /= "y"
                                                                                      then return (username, database)
                                                                                    else putStrLn "Your vote will be modified."
                                                                             let database = tempFilm:database
                                                                             putStrLn "You rating has been  sumbited successfully!"
                                                                             putStrLn (displayFilm tempFilm)
                                                                             return (username, database) 
Run Code Online (Sandbox Code Playgroud)

我的语法可能不正确我以前从未使用过

Aar*_*iel 5

没有elseif checkIfRated ... then do putStrLn "you already voted"...