[Haskell-Cafe] Parsing bytestream

C K Kashyap ckkashyap at gmail.com
Tue Nov 9 05:01:28 EST 2010


Thanks Stephen,

On Tue, Nov 9, 2010 at 2:53 PM, Stephen Tetley <stephen.tetley at gmail.com> wrote:
> I'd use a parser combinator library that has word8 word16, word32
> combinators. The latter should really have big and little endian
> versions word16be, word16le, word32be, word32le.
>
> Data.Binary should provide this and Attoparsec I think. Usually I roll
> my own, but only because I had my own libraries before these two
> existed.
>
> The idiom of a tag byte telling you what comes next is very common in
> binary formats. It means parsers can avoid backtracking altogether.

I'll take a look at attoparsec

I was also trying to understand how I could do it myself also -

Basically I've been using the Get Monad for getting out the word/8/16
etc out of a ByteStream - but I dont want to write a separate parsing
routine for each command.

So instead of doing something like this -

parseCommand1 byteStream = runGet $ do
                                             b1 <- getWord8
                                             b2 <- getWord16be
                                             return (b1,b2)


parseCommand2 byteStream = runGet $ do
                                             b1 <- getWord16be
                                             b2 <- getWord16be
                                             return (b1,b2)

I'd like to do this

parse byteStream command = runGet $ do
                                             map (commandFormat
command) --- or something like this - not exactly sure about this.

Regards,
Kashyap


More information about the Haskell-Cafe mailing list