Я думаю, что HXT, библиотека обработки XML/HTML в Haskell, имеет действительно гибкие и мощные методы для обхода и управления деревьями DOM с помощью Arrows. http://adit.io/posts/2012-04-14-working_with_HTML_in_haskell.html
Однако кажется, что HXT имеет только строковое представление для содержимого узла DOM. http://hackage.haskell.org/packages/archive/hxt/9.1.6/doc/html/Text-XML-HXT-DOM-TypeDefs.html#t:XNode
Можно ли использовать ByteString или Text для HXT? Текст предпочтительнее, так как я использую HXT с Yesod, который, похоже, в основном использует текст.