在catch子句中获取变量

时间:2011-07-25 12:11:54

标签: exception haskell catch-block stm

你好我需要写函数而不是通过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
            )

现在它对我有用。 感谢

1 个答案:

答案 0 :(得分:4)

我认为你有一个误导性的设计。尝试将catch-clause分隔为可能引发异常的唯一操作。例如,如果读取c不能导致异常,为什么不分开catch子句?