[Haskell-cafe] `Expect'-like lazy reading/Parsec matching on TCP sockets

Scott Bell sebell at gmail.com
Thu Apr 5 10:18:58 EDT 2007


Bulat,
> yes, with both variants. actually, second one should be easier to
> implement and understand. you should look into unsafeInterleaveIO
> section of http://haskell.org/haskellwiki/IO_inside

This seems to do what I want, and unless I'm overlooking something
it feels very straight-forward:
hGetContentsTimeout :: Handle -> Int -> IO String
hGetContentsTimeout h t = do
 hSetBuffering stdin NoBuffering
 ready <- hWaitForInput h t
 if (not ready) then return []
 else do
 c <- hGetChar h
 s <- unsafeInterleaveIO (hGetContentsTimeout h t)
 return (c:s)
This is not extensivly tested, but applying my parser to the string
returned by hGetContentsTimeout behaves precisely as I wanted:
It returns a match as soon as it is available, and fails if it is not
seen within t ms.
Thanks for your help!
- Scott


More information about the Haskell-Cafe mailing list

AltStyle によって変換されたページ (->オリジナル) /