То, что я пытаюсь сделать, это вызвать функцию, которую я уже создал, в основной ввод-вывод. Функция, которую я вызываю, является функцией высокого порядка, показанной ниже:
filmsByFan' f = map title $ filter (elem f . fans) testDatabase
Это часть кода, которая выдает сообщение об ошибке всякий раз, когда я пытаюсь вызвать эту функцию более высокого порядка:
getInt :: IO Int
getInt = do str <- getLine
return (read str :: Int)
main :: IO ()
main = do putStrLn "Enter 1. Add Film / 2. Display all Films / 3. Display film by Year / 4. Display film by fan / 5. Display film by actor and period / 6. Become Fan: "
str <- getLine
if str == "1"
then do return ()
else if str == "2"
then do putStrLn (displayAllFilms' testDatabase "")
else if str == "3"
then do putStrLn "Enter a film year: "
filmyear <- getInt
putStrLn (filmsByYear' filmyear) <<< **ERROR HERE** (154:47)
else main
Остальной код до сих пор работает отлично, т.е. если пользователь вводит «2», он запускает функцию displayAllFilms (обратите внимание, что функция displayAllFilms НЕ является функцией более высокого порядка)
Это потому, что функция «высокого порядка», поэтому она выдаст эту ошибку?
Coursework v1.hs:154:47:
Couldn't match expected type `Char' with actual type `[Char]'
Expected type: String
Actual type: [Title]
In the return type of a call of `filmsByYear''
In the first argument of `putStrLn', namely
`(filmsByYear' filmyear)'
Любая помощь приветствуется! заранее спасибо!