diff options
Diffstat (limited to 'Utility/Misc.hs')
-rw-r--r-- | Utility/Misc.hs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/Utility/Misc.hs b/Utility/Misc.hs index 4c4aa4c93..728598723 100644 --- a/Utility/Misc.hs +++ b/Utility/Misc.hs @@ -8,7 +8,9 @@ module Utility.Misc where import System.IO +import System.IO.Error (try) import Control.Monad +import Control.Applicative {- A version of hgetContents that is not lazy. Ensures file is - all read before it gets closed. -} @@ -26,5 +28,20 @@ readMaybe s = case reads s of _ -> Nothing {- Catches IO errors and returns a Bool -} -catchBool :: IO Bool -> IO Bool -catchBool = flip catch (const $ return False) +catchBoolIO :: IO Bool -> IO Bool +catchBoolIO a = catchDefaultIO a False + +{- Catches IO errors and returns a Maybe -} +catchMaybeIO :: IO a -> IO (Maybe a) +catchMaybeIO a = catchDefaultIO (Just <$> a) Nothing + +{- Catches IO errors and returns a default value. -} +catchDefaultIO :: IO a -> a -> IO a +catchDefaultIO a def = catch a (const $ return def) + +{- Catches IO errors and returns the error message. -} +catchMsgIO :: IO a -> IO (Either String a) +catchMsgIO a = dispatch <$> try a + where + dispatch (Left e) = Left $ show e + dispatch (Right v) = Right v |