Привет StackOverflow сообщества, еще довольно элементарный вопрос от моего имени:Haskell - удаление повторяющихся элементов из списка ADT в ADT
Был задан вопрос около пяти лет назад, который спросил: «удаление повторяющихся элементов из списка в Haskell «. У меня есть что-то похожее, чтобы спросить, альбит с определенной степенью сложности.
Говорят, что у меня есть эти типы данных:
data Library = Library {borrower :: String, book :: [Book]}
data Book = Book {title :: String, barcode :: Integer}
Тогда у меня есть функция:
addBook :: Book -> Library -> Library
addBook book library = library {book = book : getBooks library}
где getBooks просто функция, которая извлекает [книга] из библиотеки.
Очевидно, что эта функция прекрасна до тех пор, пока Ральф не заимствует дубликаты книг. Тем не менее, если он это сделает, то в списке книг будет дубликат, что нежелательно.
Как мне написать функцию, которая возвращает текущую [книгу], однако также удаляет любые дубликаты? Я попробовал метод в вопросе, упомянутом выше в начале сообщения, однако компилятор жалуется, что он специально хочет [Book] not [a].
Ссылка на предыдущий вопрос: Removing repeated elements from a list in Haskell
Как насчет использования 'nub :: Eq a => [a] -> [a]'? Обратите внимание, что вам необходимо предоставить (или получить) экземпляр «Eq». – Zeta