I'm trying to parse a very large XML file, so I've hooked up tagsoup to 
create a minimalistic streaming XML parser.

The following Parser I've been using to do a little bit of cleanup, but 
when I introduce it into the pipeline with parseForever_ the last element 
disappears.

textCombiner :: (Monad m) => PP.Parser TTag m (Maybe TTag)
textCombiner = do
  first   <- PP.draw
  second  <- PP.peek
  case (first, second) of
    (Just firstTag@(TS.TagText firstText), (Just secondTag@(TS.TagOpen _ 
_))) -> trace "1" $ if T.all (== ' ') firstText then PP.draw >> return 
(Just secondTag) else return (Just firstTag)
    (Just (TS.TagText firstText), Just (TS.TagText secondText))             
  -> trace "2" $ PP.draw >> (return $ Just $ TS.TagText $ append firstText 
secondText)
    (Just firstTag, _)                                                     
   -> trace "3" $ return (Just firstTag)
    (Nothing, _)                                                           
   -> trace "4" $ return Nothing 

With a TagOpen, TagText and then TagClose test combination I see the trace 
"3" twice and only the TagOpen and TagText elements make it through the 
pipeline.

Originally this code used draw twice, but I changed the second one to use 
peek as I thought that might make a difference, but nothing has changed.

What do I do?
Sean.

-- 
You received this message because you are subscribed to the Google Groups 
"Haskell Pipes" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].

Reply via email to