import Text.XML.HXT.Core import Data.Char(toUpper) play arg = do { results <- runX (processor arg) ; print results } processor :: FilePath -> IOSArrow XmlTree (String,String) processor filename = readDocument [withValidate no] filename >>> getChildren >>> isElem >>> hasName "html" >>> getChildren >>> isElem >>> hasName "head" >>> getChildren >>> isElem >>> hasName "meta" >>> getTuple getTuple :: IOSArrow XmlTree (String,String) getTuple = getAttrl >>> getName &&& (getChildren >>> getText) >>> arr (map toUpper) *** returnA