generalize catchHardwareFault to catchIOErrorType

This commit is contained in:
Joey Hess 2015-12-06 16:26:38 -04:00
parent 99fa2b5716
commit a0fcb8ec93
Failed to extract signature
4 changed files with 19 additions and 19 deletions

View file

@ -20,7 +20,8 @@ module Utility.Exception (
catchNonAsync,
tryNonAsync,
tryWhenExists,
catchHardwareFault,
catchIOErrorType,
IOErrorType(..)
) where
import Control.Monad.Catch as X hiding (Handler)
@ -88,11 +89,11 @@ tryWhenExists a = do
v <- tryJust (guard . isDoesNotExistError) a
return (eitherToMaybe v)
{- Catches only exceptions caused by hardware faults.
- Ie, disk IO error. -}
catchHardwareFault :: MonadCatch m => m a -> (IOException -> m a) -> m a
catchHardwareFault a onhardwareerr = catchIO a onlyhw
{- Catches only IO exceptions of a particular type.
- Ie, use HardwareFault to catch disk IO errors. -}
catchIOErrorType :: MonadCatch m => IOErrorType -> (IOException -> m a) -> m a -> m a
catchIOErrorType errtype onmatchingerr a = catchIO a onlymatching
where
onlyhw e
| ioeGetErrorType e == HardwareFault = onhardwareerr e
onlymatching e
| ioeGetErrorType e == errtype = onmatchingerr e
| otherwise = throwM e