标签: haskell concurrency transactional-memory
答案 0 :(得分:5)
这是另一种解决方案:要求对有界通道复制的所有访问都被一个在退出时释放其资源的函数括起来(通过例外或通常)。您可以使用具有rank-2 runner的monad来防止重复的通道泄漏。它仍然是手动的,但类型系统使得做顽皮的事情变得更加困难。
你真的不想依赖真正的IO终结器,因为GHC不能保证何时可以运行终结器:你知道它可能会等到程序结束才运行终结器,这意味着你直到那时我才陷入僵局。