有关捕获的文档似乎很少,而且示例很少。我试图处理由于文件不存在而导致文件检查失败的情况。如果你没有使用类型限定引用lambda体中lambda的参数,那么代码将无法编译(即删除let什么都不做)。为什么不呢?
-- checks if file is readable
checkFileAccess :: FilePath -> IO Bool
checkFileAccess f = do
catch (fileAccess f True False False)
(\e -> do
let _ = e :: IOException
return False)
答案 0 :(得分:2)
回答我自己的问题,我首先尝试了
.msg_div { padding:5px; cursor: pointer; }
.msg_div:hover { background-color: #eee; }
并发现要做到这一点你需要打开(\(e :: IOException) ...
,这有点不赞成。然后我意识到lambda表达式只是一个表达式,因此你可以对它应用一个类型规范:
-XScopedTypeVariables
这是一个解决方案。而且非常优雅。哈斯克尔总是以其深刻的连贯性使我感到惊讶。
话虽如此,我觉得执行此检查的代码在某种程度上不是惯用的Haskell。有没有更好的方法来检查和处理IO异常?