如何在Haskell中处理这个简单的IO异常
全部交易: 在下面的代码中,如何在Haskell中处理这个简单的IO异常,haskell,Haskell,全部交易: 在下面的代码中,getDirectoryContents dir可能会失败。例如,dir可能不存在。如何捕捉这些信息并向用户抛出有意义的消息?我知道IO异常处理已经被问过很多次了,但我仍然找不到一个简单的方法来做这件事 walk :: FilePath -> IO() walk dir = do contentsFullPath <- getDirectoryContents dir >>= removeDotFile >>= getFul
getDirectoryContents dir
可能会失败。例如,dir
可能不存在。如何捕捉这些信息并向用户抛出有意义的消息?我知道IO异常处理已经被问过很多次了,但我仍然找不到一个简单的方法来做这件事
walk :: FilePath -> IO()
walk dir = do
contentsFullPath <- getDirectoryContents dir >>= removeDotFile >>= getFullPath
dirList <- filterM doesDirectoryExist contentsFullPath
fileList <- filterM doesFileExist contentsFullPath
forM_ fileList processFile >> forM_ dirList walk
where
removeDotFile = return . filter (`notElem` ["..", "."])
getFullPath = return . zipWith ( </> ) (repeat dir)
processFile = getFileSize
walk::FilePath->IO()
步行方向
contentsFullPath>=removeDotFile>>=getFullPath
dirList表单udirlist walk
哪里
removeDotFile=返回。过滤器(`notElem`[“.”、“]”)
getFullPath=return。zipWith()(重复dir)
processFile=getFileSize
您正在寻找一个模块,该模块包含一系列用于捕获/处理异常的函数
就你而言
handler :: IOException -> IO [FilePath]
handler = undefined
walk :: FilePath -> IO()
walk dir = do
contentsFullPath <- handle handler $
getDirectoryContents dir
>>= removeDotFile
>>= getFullPath
...
handler::IOException->IO[FilePath]
处理程序=未定义
walk::FilePath->IO()
步行方向
contentsFullPath>=removeDotFile
>>=获取完整路径
...
handle
与catch
相同,只是参数被交换了。它接受一个可能抛出异常的IO
计算,一个针对某种类型异常的处理程序,然后运行计算,捕获特定类型的异常
由于您可能无法返回适当的文件路径列表
s,因此您可能希望使用类似于walk dir=handle handler$do…
的方法捕获更高级别的异常,然后您可以简单地使用IOException->IO()
类型的处理程序
因为在本例中,我们对IO
异常感兴趣,所以我们使用的是