gpt4 book ai didi

haskell - 如何正确使用 catch?

转载 作者:行者123 更新时间:2023-12-02 00:09:07 26 4
gpt4 key购买 nike

当我使用 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 的第二个参数捕获 getTemporaryDirectory 抛出的 UnsupportedOperation 错误吗?

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

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

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

我已经尝试了我能想到的该语法的所有变体,但我总是会出错;似乎不可能像在 lambda 中那样将类型注释(?)括在括号中。我认为极差的文档。不幸的是,这似乎是文档作者所追求的标准。

最佳答案

无需任何扩展即可使用的简单技巧是:

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 )

关于haskell - 如何正确使用 catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com