[Haskell-cafe] Parsec and network data
brian
brianchina60221 at gmail.com
Fri Aug 29 14:34:42 EDT 2008
On Fri, Aug 29, 2008 at 11:15 AM, Donn Cave <donn at avvanta.com> wrote:
> Quoth brian <brianchina60221 at gmail.com>:
>
> | I want to use Parsec to parse NNTP data coming to me from a handle I
> | get from connectTo.
>
> I would implement the network service
> input data stream myself, with timeouts
Could you explain a little about how this would look?
If it's reading characters trying to make a String we want to call a
'line', isn't that what the parser is supposed to be doing? If you
were parsing /etc/passwd, would you read each line yourself and give
each one to Parsec?
> So the parser would
> never see any streams or handles or anything, it would just get strings
> to parse.
Well, I think the parser still works with a Stream. For example,
Text/Parsec/ByteString.hs makes ByteString an instance of Stream.
My next try is to make this thing an instance of Stream:
data Connection = Connection
{ connectionHandle :: Handle
, connectionData :: C.ByteString
}
In uncons, the easy case is when connectionData is nonnull. If it is
null, hWaitForInput on the handle. If we get something, read it and
return appropriate stuff. If not, it's a parse error similar to
getting unexpected EOF in a file.
More information about the Haskell-Cafe
mailing list