У меня возникли проблемы выводящий определенные биты информации из этой конкретной базы данных:Haskell высшего порядка Функция
type Title = String
type Actor = String
type Cast = [Actor]
type Year = Int
type Fan = String
type Fans = [Fan]
type Period = (Year, Year)
type Film = (Title, Cast, Year, Fans)
type Database = [Film]
testDatabase :: Database
testDatabase = [("Casino Royale", ["Daniel Craig", "Eva Green", "Judi Dench"], 2011, ["Garry", "Dave", "Zoe", "Kevin", "Emma"]),
("Cowboys & Aliens", ["Harrison Ford", "Daniel Craig", "Olivia Wilde"], 2011, ["Bill", "Jo", "Garry", "Kevin", "Olga", "Liz"]),
("Catch Me If You Can", ["Leonardo DiCaprio", "Tom Hanks"], 2006, ["Zoe", "Heidi", "Jo", "Emma", "Liz", "Sam", "Olga", "Kevin", "Tim"])]
Примечание: это только часть базы данных из-за размера списка.
Я пытаюсь написать функцию, которая позволяет пользователю вводить год и выводить ТОЛЬКО названия фильмов. Я сделал аналогичный с фанатами, к которым пользователь вводит имя вентилятора, и выводит фильм, который они представляют любитель ... код для этого показан ниже:
filmsByFan y = map (\(a,_,_,_) -> a) $ filter (\(_,_,_,a) -> elem y a) testDatabase
Это работает на 100%, и поэтому я попробовал подобное одно с byYear:
filmsByYear y = map (\(a,_,_,_) -> a) $ filter (\(_,_,a,_) -> elem y a) testDatabase
Но это не компилируется .. . Это потому, что тип Год задан как Int? Если это так, то решение моей проблемы аналогично?
Заранее благодарен!
Я внес изменения в код, но это ошибка я получение -------------------- Нет экземпляра для (Eq ([Год] -> Bool)) , связанный с использованием '== ' Возможное исправление: add объявление экземпляра для (Eq ([Year] -> Bool)) В выражении: elem a == y В первом аргументе 'filter ', а именно ' (\ (_, _, a, _) - > elem a == y) ' Во втором аргументе '($)', а именно ' filter (\ (_, _, a, _) -> elem a == y) testDatabase ' – user2240649
Я протестировал его, и я уверен оно работает. Как вы называете эту функцию? – Thomas
Не беспокойтесь, у меня сейчас работает! Большое спасибо за ваш вклад! – user2240649