[Haskell-cafe] Haskell poker server
miles at milessabin.com
Tue Aug 30 17:37:22 EDT 2005
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
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
'1', n, b0 ... bn-1
I'm not aware of any other general purpose parsing framework which can
do this anything like as deftly.
More information about the Haskell-Cafe