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