Я играл с созданием пользовательских списков отображения.Концепция действительно проста, но я продолжаю получать ошибку IO ().Мой код:
displayList :: [Int] -> IO()
displayList [] = putStrLn ""
displayList (firstUnit:theRest) = putStrLn (show firstUnit ++ "\n" ++
displayList theRest)
Код ошибки, который я получаю:
• Couldn't match expected type ‘[Char]’ with actual type ‘IO ()’
• In the second argument of ‘(++)’, namely ‘(displayList theRest)’
In the first argument of ‘putStrLn’, namely
‘((show firstUnit) ++ (displayList theRest))’
In the expression:
putStrLn ((show firstUnit) ++ (displayList theRest))
Конкретная часть строки, которая получает ошибку, это displayList theRest
, а не putStrLn ((show firstUnit) ++
часть.
Мне кажется, я понимаю, что происходит: когда в строке с ошибкой вызывается displayList theRest
, он в конечном итоге после нескольких рекурсивных вызовов может вернуть тип IO () из строки displayList [] = putStrLn ""
который не поддерживается как ввод в функции putStrLn
.Кто-нибудь знает способ решить эту проблему?