Я хочу прочитать все данные на дескрипторе, а затем заблокировать ожидание дополнительных данных. listen1 останавливается, когда в потоке есть символ '\ n'. listen2 работает и может быть сделан полностью общим, имитируя код для hGetNonBlocking. Каков наилучший способ сделать это?
import qualified Data.ByteString as B
loop = sequence_ . repeat
listen1 :: Handle -> TChan B.ByteString -> IO()
listen1 sock chan = do
loop ( do
s <- B.hGetLine sock
atomically (writeTChan chan s)
)
listen2 :: Handle -> TChan B.ByteString -> IO()
listen2 sock chan = do
loop ( do
s <- B.hGet sock 1
s1 <- B.hGetNonBlocking sock 65000
atomically (writeTChan chan (B.append s s1))
)