Cagdas Ozgenc wrote:
books2 :: Database2 -> Person -> [Book]
books2 db person = head [ snd tuple | tuple <- db, fst tuple == person ]
borrowers2 :: Database2 -> Book -> [Person] borrowers2 db book = [ person | (person, books) <- db, book <- books ]
You can't pattern match against a variable (like equal x x = True). But that is what you seem to be doing in book <- books. However, Haskell doesn't give you an error in this case (as it would with my equal example) because the book in book <- books is considered a new veriable that is hiding the other book variable. What you wrote is the same as
borrowers2 db book = [ person | (person, books) <- db, x <- books ]
where x <- books has no meaning (except maybe the person should have at least one book). Try this instead:
borrowers2 db book = [ person | (person, books) <- db, elem book books]
As for books2, use (person, books) <- db instead of tuple. Looks better than fst and snd in my opinion. Tom