[Haskell-cafe] Network parsing and parsec
p.turner at computer.org
Sat Sep 17 17:57:59 EDT 2005
On 2005 September 15 Thursday 12:09, John Goerzen wrote:
> However, the difficulty I come up time and again is: parsec normally
> expects to parse as much as possible at once.
> With networking, you must be careful not to attempt to read more data
> than the server hands back, or else you'll block.
> I've had some success with hGetContents on a socket and feeding it into
> extremely carefully-crafted parsers, but that is error-prone and ugly.
> Here's the problem. With a protocol such as IMAP, there is no way to
> know until a server response is being parsed, how many lines (or bytes)
> of data to read. Ideally, I would be able to slrup in more data as I
> go, but that doesn't seem to be very practical in Parsec either.
Assuming I've understood the gist of Koen Claessen's "Parallel Parsing
Processes", its implementation of the Parsec interface returns all possible
parses, in the order of how much input they consume. Also, no more input is
consumed than necessary. For the purpose of parsing network input, that's
superior to the usual order in which parse alternatives are considered. The
Parsec interface supports lookahead, which implies examining beyond what is
consumed. That could be error-prone, but I expect lookahead is considerably
easier to manage than Parsec's order of considering alternatives.
More information about the Haskell-Cafe