
Bulat,
one possible solution: use Streams library and establish a stream transformer that adds an error call on timeout. something like this:
data StreamWithTimeout s = StreamWithTimeout s Timeout
instance Stream s => Stream (StreamWithTimeout s) where vGetChar (StreamWithTimeout s t) = do timeout t (vGetChar s) (error "Timed out!")
If possible, I would like to try and use lazy [Char]s -- this would greatly simplify my usage of the Parsec parser.
or, even simple, you can make your own variant of hGetContents which adds a timeout checks before each next call to hGetChar or hGetBuf
Can this be as simple as applying the parser against a string returned by the (modified) hGetContents, which will read all that is possible given a certain time constraint? Thanks, - Scott