我怎样才能正确使用捕获?

时间:2013-05-13 18:07:59

标签: haskell

当我使用catch时,我收到此警告:

Warning: In the use of `catch'
         (imported from System.IO.Error):
         Deprecated: "Please use the new exceptions variant, Control.Exception.catch"

我尝试使用Control.Exception.catch,但是我一直在追逐错误太多的鼠洞。有人可以发布一个示例,其中第二个catch的catch捕获了getTemporaryDirectory抛出的UnsupportedOperation错误吗?

tempdir <- catch (getTemporaryDirectory) 
                 (\e -> return ".")  

另外,我如何在catch文档中使用catch语法:

catch f (\e -> ... (e :: SomeException) ...)

我已经尝试了我能想到的那种语法的每种变体,而且我总是得到一个错误;似乎不可能将类型注释(?)括在括号中,就像在lambda中那样。在我看来,文档极差。不幸的是,这似乎是文档编写者所追求的标准。

1 个答案:

答案 0 :(得分:3)

一个没有任何扩展的简单技巧是:

m `catch` (\e -> do
    let _ = e :: IOException  -- or whatever exception type you want to catch
    doStuff )

如果您使用值e,那么您也可以在任何地方使用类型注释:

m `catch` (\e -> do
    print (e :: IOException)
    doStuff )