决定要处理哪个异常

时间:2011-03-09 21:42:38

标签: haskell exception-handling

在决定为GHC版本> = 6.10处理哪个Exception实例以及给定getDirectoryContents的文档的上下文中,是否可以假设getDirectoryContents只会抛出IOExceptions?例如。没有例外会过去

let handler = (const $ return []) :: IOException -> IO [FilePath]
contents <- handle handler $ getDirectoryContents dir

......好吧,除了堆栈溢出等等,但getDirectoryContents没有特别抛出异常?在我看来,这应该是这种情况,但我没有在文档中看到它,所以我只是想确定。

1 个答案:

答案 0 :(得分:1)

好吧,我之前从未尝试过阅读System.Directory的代码,但查看代码表明这是真的。与函数定义中的错误处理相关的唯一代码是对modifyIOError的调用,它似乎添加了特定的详细信息,如函数名称和引发的任何IO错误的目录路径。我也快速查看了System.Posix.Directory模块,除了IO错误之外没有明显的错误迹象。

我只是快速浏览一下,所以我可能错过了一些东西......

另一方面,你真的关心它究竟是什么样的错误吗?你似乎试图说“如果出现问题,只需返回一个空列表,然后继续”。如果这就是你想要的,你为什么不抓住任何被抛出的错误,而不是特别是IO错误?

我的意思是说,错误处理程序的主要目的似乎只是忽略错误,那么为什么不一般只忽略它们呢?