こんにちは、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
)
今ではうまくいきます。ありがとう