
On Fri, Aug 29, 2008 at 11:15 AM, Donn Cave
Quoth brian
: | 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.