#haskell
Вопрос:
Функция buildTasksList принимает и пустой список получает ввод пользователя и возвращает новый список с добавленным в него вводом пользователя.
В основной функции я пытаюсь создать новый список, выполнив 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
Ответ №1:
проблема в том, что ваша функция buildTasksList имеет тип:
buildTasksList :: [String] -> IO [String]
в то время как задача имеет тип:
[a]
таким образом, вам нужно будет извлечь результат списка задач построения из его контекста:
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