import Text.XML.Expat.Chunked import Text.XML.Expat.Format import Text.XML.Expat.Tree hiding (parse) 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 eErr <- fileDriver (parse defaultParserOptions dump) "sudoku.xml" case eErr of Left err -> putStrLn $ "failed: "++show err Right () -> putStrLn "" dump :: CNode IO Text Text -> HandlerT IO () dump doc = do let txt = formatG doc execute $ forL txt $ liftIO . B.hPutStr stdout where mapL :: List c => (a -> ItemM c b) -> c a -> c b mapL f = joinM . liftM f forL = flip mapL