5

System.Directory haddockによるrenameFileと、いくつかの理由で失敗する可能性があります。

  • HardwareFault 物理 I/O エラーが発生しました。【EIO】
  • InvalidArgument いずれかのオペランドが有効なファイル名ではありません。[エナメトゥーロン、イループ]
  • isDoesNotExistError / NoSuchThing 元のファイルが存在しないか、ターゲットへのパスがありません。[ENOENT、ENOTDIR]
  • isPermissionError / PermissionDenied プロセスには操作を実行する権限がありません。[EROFS、EACCES、EPERM]
  • ResourceExhausted 操作を実行するのに十分なリソースがありません。[EDQUOT、ENOSPC、ENOMEM、EMLINK]
  • UnsatisfiedConstraints 実装依存の制約が満たされていません。[エビジー]
  • UnsupportedOperation 実装は、この状況での名前変更をサポートしていません。【エクスデブ】
  • いずれかのパスが既存のディレクトリを参照しています。[ENOTDIR、EISDIR、EINVAL、EEXIST、ENOTEMPTY]

これらのいくつか (isPermissionError、isDoesNotExistError) にはテスト機能がありますが、他のもの (私が興味を持っている UnsupportedOperation を含む) は何にも対応していないようです。それは何ですかUnsupportedOperation、どうすればテストできますか?

より一般的には、このようなものが何であるかを知るにはどうすればよいでしょうか。ソースコードのどこにそれが発生したかが見えないので、それは下位レベルのエラーのラッパーであると推測していますが、どのように対処すればよいでしょうか?

4

1 に答える 1

5

UnsupportedOperationghc 固有です。したがって、インポートGHC.IO.Exceptionする必要があります。例外タイプを確認するために必要なものがすべて含まれています。

以下に例を示します。

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 に答える