Catch句で変数を取得します
-
25-10-2019 - |
質問
こんにちは、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
)
今、それは私のために働いています。ありがとう
解決
あなたは誤ったデザインを持っていると思います。例外をスローする可能性のある唯一のアクションにキャッチクローズに分離してみてください。たとえば、Cを読むことが例外を引き起こすことができない場合、漁獲量を分離してみませんか?
所属していません StackOverflow