Здравствуйте, мне нужно написать функцию, которая будет отправлять и получать сообщения через TCP и автоматическое переподключение, если соединение разорвано.Сообщения взяты из канала STM
f ch a b =
h <- connectTo a b
forever $ do
c <- atomically $ readTChan ch
{- do smth with c -}
`catch` (const $ f ch a b)
Моя проблема в том, что если соединение разорвано, я потеряю 'c', которую я прочитал из канала.Поэтому в предложении catch
я не хочу ничего похожего на unGetTChan, но в этом коде 'c' не в зацеплении.Можете ли вы посоветовать '' haskellic '' способ сделать такую вещь?
обновить после сообщения FUZxxl
После комментария FUZxxl я переписал функцию в следующую форму
fun ch a b = do
h <- connectTo a b
forever $ do
c <- atomically $ readTChan chan
do
{- do smth with c -}
`catch` (const $ do
atomically $ unGetTChan chan c
fun chan con
)
теперь это работает для меня.спасибо