Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 菜单选项问题_Haskell - Fatal编程技术网

Haskell 菜单选项问题

Haskell 菜单选项问题,haskell,Haskell,我花了几个小时编辑这段代码,只是为了摆脱这个缩进问题,我遵循了我以前做的链接。但是因为我遵循这些代码,我需要再次调整,因为我的spaDatabase和updatedDB没有被识别,最终我需要重新调整顶部的所有内容,现在底部又出现问题 我一直在删除和添加空间,但错误仍然存在。我还尝试根据下面我得到的这个解析错误的推荐答案之一。但如果我删除它,它将成为第二个解析错误 let output :: IO () parse error (possibly incorrect indentation or

我花了几个小时编辑这段代码,只是为了摆脱这个缩进问题,我遵循了我以前做的链接。但是因为我遵循这些代码,我需要再次调整,因为我的spaDatabase和updatedDB没有被识别,最终我需要重新调整顶部的所有内容,现在底部又出现问题

我一直在删除和添加空间,但错误仍然存在。我还尝试根据下面我得到的这个解析错误的推荐答案之一。但如果我删除它,它将成为第二个解析错误

let output :: IO ()
parse error (possibly incorrect indentation or mismatched brackets)

--second error
parse error on input `='


main::IO()
main=do
内容菜单spaDB
3->do putStrLn“进入水疗区:”

ar这里的缩进是固定的。它仍然不正确:它定义了
菜单
输出
,但没有调用它们。但它至少能让你克服语法错误

main :: IO()
main = do 
       contents <- readFile "spa.txt"
       let spaDatabase = (read contents :: [Spa])
       putStrLn "Please Enter Your Name: "
       name <- getLine
       putStrLn ("Welcome " ++ name)
       putStrLn ""
       
menu spaDatabase = do
             putStrLn "\nPlease select an option:"
             putStrLn "1: Add a new spa to the database "
             getLine  -- This returns the value, so no need for <-
 
output :: Int -> IO ()
output option = case option of 
             1 -> do 
                putStrLn "Enter Spa ID: "
                rid <- getLine
                let updatedDB = (addSpa rid br ar (read st) spaDatabase)
                putStrLn (spaListStr updatedDB)                           

             2 -> putStrLn (spaListStr updatedDB) >> menu spaDB
  
             3 -> do 
                putStrLn "Enter Spa Area:"
                ar <- getLine
                putStrLn (spaListStr (read ar) spaDatabase)                    
main::IO()
main=do
内容>菜单spaDB
3->do
putStrLn“进入水疗区:”

ar这种类型的签名:
output::IO()
告诉我们
output
没有参数,下面的一行告诉我们它只有一个参数。如选项1所示?这没有意义。在Haskell中,您在其他语言中使用缩进式的花括号(这就是为什么我说要去掉花括号:两者都有会混淆事情)。第二个“let”和“output”函数的额外缩进是错误的。“let”应与“putStrLn”保持一致,“output”应与“menu”@TitianaLo保持一致-它与
选项的任何特定数值无关。您需要的<代码>输出< /代码>可能是“代码>输出::int -> IO()/Case> @ TitianaLo。此外,如果用8个空格缩进显然会使代码不可读(因为它占用了很长的行并迫使读者使用水平滑块),您可以考虑仅用4个空格来缩进。
main :: IO()
main = do 
       contents <- readFile "spa.txt"
       let spaDatabase = (read contents :: [Spa])
       putStrLn "Please Enter Your Name: "
       name <- getLine
       putStrLn ("Welcome " ++ name)
       putStrLn ""
                let menu spaDatabase = do
                          putStrLn "\nPlease select an option:"
                          putStrLn "1: Add a new spa to the database "
                          option <- getLine

                
                                output :: IO ()
                                output option = case option of 
                                       1 -> do putStrLn "Enter Spa ID: "
                                               rid <- getLine
                                               let updatedDB = (addSpa rid br ar (read st) spaDatabase)
                                               putStrLn (spaListStr updatedDB)
                                           

                                       2 ->    putStrLn (spaListStr updatedDB) >> menu spaDB
                    
                                       3 -> do putStrLn "Enter Spa Area:"
                                               ar <- getLine
                                               putStrLn (spaListStr (read ar) spaDatabase)
                            
                       
main :: IO()
main = do 
       contents <- readFile "spa.txt"
       let spaDatabase = (read contents :: [Spa])
       putStrLn "Please Enter Your Name: "
       name <- getLine
       putStrLn ("Welcome " ++ name)
       putStrLn ""
       
menu spaDatabase = do
             putStrLn "\nPlease select an option:"
             putStrLn "1: Add a new spa to the database "
             getLine  -- This returns the value, so no need for <-
 
output :: Int -> IO ()
output option = case option of 
             1 -> do 
                putStrLn "Enter Spa ID: "
                rid <- getLine
                let updatedDB = (addSpa rid br ar (read st) spaDatabase)
                putStrLn (spaListStr updatedDB)                           

             2 -> putStrLn (spaListStr updatedDB) >> menu spaDB
  
             3 -> do 
                putStrLn "Enter Spa Area:"
                ar <- getLine
                putStrLn (spaListStr (read ar) spaDatabase)