
Hi John, I recently posted new and fancy binary Get monads in http://article.gmane.org/gmane.comp.lang.haskell.libraries/9691 and http://article.gmane.org/gmane.comp.lang.haskell.libraries/9756 which might be of interest since network protocol are usually specified in bytes at the wire level. The latest one takes input which may or may not be complete and returns a stream (a Seq) of results. When it reaches the end of the input it pauses and asks for more. This handling of partial input might be good for network protocols where you can feed the data from the socket to the parser in pieces. (This Get monad eats lazy bytestrings). The latest MyGetW.hs allows the Get code to send a Data.Sequence.Seq of results by using yieldItem (and perhaps flushItems). This is in addition to any final result of the parser. It has the usual binary Get interface, so you can pull bytestrings and words and (fancy) any Storable off the input. I call it "fancy" because the monad is a transformer, and it is a MonadError/MonadPlus/Alternative, and it supports lookAhead and callCC/MonadCont and Reader/Writer/State. Whew. As for IMAP, I use imapfilter (http://imapfilter.hellug.gr/) which uses Lua. Cheers, Chris