
I swear attoparsec-enumerator is going to give me grey hair; the error
you're receiving is because iterParser itself is divergent. Fixed in
0.2.0.3, with my sincere apologies.
On Sun, Dec 5, 2010 at 09:14, Crutcher Dunnavant
I have spent a good chunk of the past week tracing code, trying to solve this problem. I'm seeing an error when using Enumerator and Attoparsec that I can't explain. This is a reduced form of the problem.
In general, I've observed that debugging broken iterators and enumerators is very hard. We probably want some tooling around that; I'm looking at an identity enumeratee with debug.trace shoved in, or something like that, not sure yet what would help.
{- Haskell 2010, ghc 6.12.3 array-0.3.0.2 attoparsec-0.8.2.0 attoparsec-enumerator-0.2.0.2 bytestring-0.9.1.7 containers-0.4.0.0 deepseq-1.1.0.2 enumerator-0.4.2 text-0.10.0.0 transformers-0.2.2.0 -} import Control.Applicative ((<|>)) import qualified Data.Attoparsec.Char8 as AP import qualified Data.Attoparsec.Combinator as APC import qualified Data.Attoparsec.Enumerator as APE import qualified Data.ByteString.Char8 as B import qualified Data.Enumerator as E import Data.Enumerator (($$)) import System.IO as IO
parseLine :: AP.Parser B.ByteString parseLine = do AP.char '+' return . B.pack =<< APC.manyTill AP.anyChar endOfLineOrInput
endOfLineOrInput :: AP.Parser () endOfLineOrInput = AP.endOfInput <|> AP.endOfLine
pp :: Show a => AP.Parser a -> String -> IO () pp p s = do result <- E.run $ E.enumList 1 [ B.pack s ] $$ E.sequence (APE.iterParser p) $$ E.printChunks False case result of (Right _) -> return () (Left e) -> IO.hPutStrLn stderr $ show e
main = pp parseLine "+OK" {- Observed output: ["OK"] *** Exception: enumEOF: divergent iteratee
Problems with this: 1) I didn't write an iteratee, enumerator, or enumeratee in this code. Something's wrong.
2) If the parser is divergent, I _should_ be getting the error message: "iterParser: divergent parser" -}
-- Crutcher Dunnavant
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe