
Joel Reymont wrote,
Can I beg for examples?
I've been using parsec for binary parsing (Java class files in my case) as a first exercise with both Haskell and combinator parsing, with a view to applying same to network protocols. The experience has been surprisingly pleasant. In particular, it handles the common "count, count*tokens" idiom that's found in many binary formats and network protocols very smoothly ... something I've always had to code by hand. Being so new to Haskell I'm hesitant to give possibly bad examples, but how about something like this, constantPoolEntry :: Parser ConstantPoolEntry constantPoolEntry = do { u1Literal 1 ; bytes <- u2 >>= (flip count $ u1) ; return (ConstantUTF8 (decodeUTF8 bytes)) } <|> -- etc. ... where u1Literal matches the byte '1' from the input, and u2 parses a following 2 byte unsigned integer byte-count which is then used to construct a parser of exactly byte-count bytes, ie. it matches the byte sequence, '1', n, b0 ... bn-1 I'm not aware of any other general purpose parsing framework which can do this anything like as deftly. Cheers, Miles