{-# LANGUAGE ScopedTypeVariables #-} module ControlMaybe where -- import GHC.IO.Exception (IOException(..)) import Control.Exception as Exception (IOException(..),catch) withJust :: Monad m => Maybe x -> (x -> m ()) -> m () withJust (Just x) f = f x withJust Nothing f = return () whenJust :: Monad m => m (Maybe x) -> (x -> m ()) -> m () whenJust acn f = do x <- acn withJust x f catchIO_ :: IO a -> IO a -> IO a catchIO_ a h = Exception.catch a (\(_ :: IOException) -> h) catchIO :: IO a -> (IOException -> IO a) -> IO a catchIO body handler = Exception.catch body handler handleIO_ :: IO a -> IO a -> IO a handleIO_ = flip catchIO_ handleIO :: (IOException -> IO a) -> IO a -> IO a handleIO = flip catchIO