5

根据System.Directory haddockrenameFile可能会因多种原因而失败:

  • HardwareFault 发生物理 I/O 错误。[EIO]
  • InvalidArgument 任一操作数不是有效的文件名。[ENAMETOOLONG,ELOOP]
  • isDoesNotExistError / NoSuchThing 原始文件不存在,或者没有指向目标的路径。[ENOENT,ENOTDIR]
  • isPermissionError / PermissionDenied 进程没有足够的权限来执行操作。[EROFS、EACCES、EPERM]
  • ResourceExhausted 没有足够的资源来执行操作。[EDQUOT、ENOSPC、ENOMEM、EMLINK]
  • UnsatisfiedConstraints 不满足实现相关的约束。[忙]
  • UnsupportedOperation 在这种情况下实现不支持重命名。[EXDEV]
  • InappropriateType 任一路径均指现有目录。[ENOTDIR, EISDIR, EINVAL, EEXIST, ENOTEMPTY]

其中一些(isPermissionError、isDoesNotExistError)具有测试功能,但其他一些(包括我感兴趣的 UnsupportedOperation)似乎与任何东西都不对应。什么是UnsupportedOperation以及如何测试它?

更一般地说,我应该如何去找出这样的东西。我在源代码中看不到它被引发的任何地方,所以我猜它是一个较低级别错误的包装器 - 但我应该如何处理这些错误?

4

1 回答 1

5

UnsupportedOperation is ghc-specific. So you have to import GHC.IO.Exception, it contains everything you need to check exception type.

Here is an example:

import Control.Exception
import GHC.IO.Exception

main :: IO ()
main = do
  action `catch` (\(IOError _ UnsupportedOperation _ _ _ _) -> print "UnsupportedOperation")
  where
  action = throw $ IOError Nothing UnsupportedOperation "loc" "desc" Nothing Nothing
于 2013-06-28T11:15:52.593 回答