你好我需要写函数而不是通过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发表评论后,我已将功能重写为下一个表格
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
)
现在它对我有用。 感谢
答案 0 :(得分:4)
我认为你有一个误导性的设计。尝试将catch-clause分隔为可能引发异常的唯一操作。例如,如果读取c不能导致异常,为什么不分开catch子句?