我正在Haskell中编写一个应用程序,如果失败readFile或想要向用户显示有意义的错误消息writeFile.我正在IOError使用Control.Exception.tryJust并将它们转换为人类可读的文本.
但是,我无法弄清楚应该捕获哪些错误以及如何从中提取信息.例如,假设"/ bin"是一个目录而"/ bin/ls"是一个文件,readFile "/bin"并且readFile "/bin/ls/asdf"两者都给出"不合适的类型",但(在我看来)它们是不同的错误.在第一个的情况下,我可以通过处理目录中的每个文件来恢复,而第二个更像是"不存在"类型的错误.
与前面的例子相比,似乎没有一种可移植的方式来捕获"不适当类型"错误.看GHC.IO.Exception,InappropriateType只标记GHC,所以我不能只是模式匹配ioeGetErrorType.我可以模式匹配,ioeGetErrorString但我不确定这些字符串在不同平台,编译器,语言环境等之间是否总是相同的.
总之,我的问题是:
readFile/ writeFile?InappropriateType?更新:
根据@ ErikR的回答,我正在查看GHC.IO.Exception.IOException以下Haskell程序的字段:
import Control.Exception (try)
import GHC.IO.Exception (IOException(..))
import qualified Data.ByteString as B
main :: IO ()
main = do
try (readFile "/nonexistent") >>= printException
try (writeFile "/dev/full" " ") >>= printException
try (readFile "/root") >>= printException
try (readFile "/bin") …Run Code Online (Sandbox Code Playgroud)