3
当我使用抓,我得到这样的警告:如何正确使用渔获物?
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的第2个参数捕获getTemporaryDirectory抛出的UnsupportedOperation错误吗?
tempdir <- catch (getTemporaryDirectory)
(\e -> return ".")
而且,我怎么使用在catch文档捕捉语法:
catch f (\e -> ... (e :: SomeException) ...)
我已经试过了语法,我能想到的每一个变化,我总是得到一个错误;似乎不可能将类型注释(?)括在类似于lambda中的括号中。我认为文档非常差。不幸的是,这似乎是文档编写者渴望的标准。
”不是个是否认为所有例外都是不好的做法?我试图限制捕获只捕获UnsupportedOperation。当我使用e :: UnsupportedOperation时,我得到了类型构造函数或类UnsupportedOperation。我还会注意到,我看起来很高,在haskell文档中查看haskell例外列表无济于事。 – 7stud 2013-05-13 18:16:10
哦!您可以捕获IOException,然后使用System.IO.Error中的函数来确定它是哪种类型的IOException。但是,最新的'base'没有'UnsupportedOperation'' IOException'。它有一个非法的操作错误,你可以用'isIllegalOperation'来测试,但是我需要检查这个函数是否是正确的例外。等一下。 – 2013-05-13 18:24:06
@ 7stud对不起,我找不出它会抛出哪个异常。 :(你现在最好的选择就是捕捉'IOException'。 – 2013-05-13 18:44:14