当我使用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中那样。在我看来,文档极差。不幸的是,这似乎是文档编写者所追求的标准。
答案 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 )