module Graphics.ImageMagick.MagickWand.Utils
( fromMBool
, toMBool
, withException
, withException_
, withExceptionIO
)
where
import Control.Exception.Base
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Trans.Resource
import Graphics.ImageMagick.MagickWand.FFI.Types
import Graphics.ImageMagick.MagickWand.Types
fromMBool :: (MonadResource m) => IO MagickBooleanType -> m Bool
fromMBool = liftM (==mTrue) . liftIO
withException :: (MonadResource m, ExceptionCarrier a) => a -> IO (MagickBooleanType, b) -> m b
withException a f = liftIO $ do
(r,b) <- f
unless (r==mTrue) $ getException a >>= throw
return b
withException_ :: (MonadResource m, ExceptionCarrier a) => a -> IO MagickBooleanType -> m ()
withException_ a f = liftIO $ f >>= \x -> void $ unless (x==mTrue) (getException a >>= throw)
withExceptionIO :: (ExceptionCarrier a) => a -> IO (MagickBooleanType, b) -> IO b
withExceptionIO a f = liftIO $ do
(r,b) <- f
unless (r==mTrue) $ getException a >>= throw
return b
toMBool :: Bool -> MagickBooleanType
toMBool True = mTrue
toMBool False = mFalse