-- Make sure monads-fd package is installed. import Text.XML.Expat.Chunked import Text.XML.Expat.Format import Control.Monad import Control.Monad.Trans import qualified Data.ByteString as B import Data.Iteratee import Data.List.Class import Data.Text (Text) import qualified Data.Text as T import System.IO main :: IO () main = do putStrLn $ "Test handling of parse error" iter <- parse defaultParseOptions dump eErr <- fileDriver iter "broken.xml" case eErr of Left err -> putStrLn $ "failed: "++show err Right () -> putStrLn "" dump :: ListOf (UNode s IO Text) -> XMLT s IO () dump doc = do (elt:_) <- toList doc let txt = formatG elt execute $ forL txt $ liftIO . B.hPutStr stdout where mapL :: List c => (a -> ItemM c b) -> c a -> c b mapL f = joinM . liftM f joinM :: List c => c (ItemM c a) -> c a joinM = (>>= joinL . liftM return) forL = flip mapL