函数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