Although I'm still for now a beginner in Haskell, I have the strong opinion that HTML parsing in 2012 must be done using CSS selectors, and it seems the libraries recommended so far don't use that principle.
One possibility is HandsomeSoup, which is built on top of HXT:
http://egonschiele.github.com/HandsomeSoup/
http://codingtales.com/2012/04/25/scraping-html-with-handsomesoup-in-haskell
This page about HXT, on which HandsomeSoup relies, will also be helpful (you're going to need getText or deep getText):
http://adit.io/posts/2012-04-14-working_with_HTML_in_haskell.html
But another choice is dom-selector:
http://hackage.haskell.org/package/dom-selector
It is right now alpha and its long-term maintenance could be a problem. The advantage of dom-selector is that I couldn't get unicode characters to work with HandsomeSoup. They worked out of the box with dom-selector.
This question is related to that:
Is it possible to use Text or ByteString on HXT in Haskell?
dom-selector is based on html-conduit and xml-conduit, for which maintenance appears assured.
EDIT: note my newer answer about lens-based parsing. I left this answer as it's still good on its own, but I would now personally rather use the other approach.