获取用户输入并添加到列表中



函数buildTasksList获取用户输入并返回添加了userInput的新列表。

在main函数中,我试图通过执行task ++ buildTasksList []来创建新列表,这种方法给我这个错误

无法匹配类型'[]'和' IO '期望类型:IO a0实际类型:[a0]

task = []
printTasks [] = do
putStrLn "That's all the tasks!"
printTasks (x : xs) = do
putStrLn $ "  " ++ x
printTasks xs
buildTasksList tasks = do
putStrLn "Enter a task: "
input <- getLine
let task = input : tasks
return task

main = do
putStrLn "Below are the options: naddnprintnsearch"
input <- getLine
task ++ buildTasksList []
main

问题是你的函数buildTasksList的类型:

buildTasksList :: [String] -> IO [String]

而任务类型为:

[a]

所以你需要从它的上下文中获取buildTasksList的结果:

l_Tasks <- buildTasksList []
let newTasks = l_Tasks ++ task
return newTasks

简化您的示例并添加一个结束选项,您可以这样做:

main :: IO ()
main = main' []
where
main' :: [String] -> IO ()
main' list = do
putStrLn "Below are the options: naddnprintnsearch"
putStrLn "Enter a task: "
input <- getLine 
correctInput input list
correctInput :: String -> [String] -> IO ()
correctInput input list
| input == "add" || input == "print" || input == "search" 
= main' $ input : list
| input == "End" = printTasks list
| otherwise = do
putStrLn "wrong input"
main' list