imagemagick-0.0.2: Graphics/ImageMagick/MagickWand/Utils.hs
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
{-# INLINE fromMBool #-}
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
{-# INLINE withException #-}
withException_ :: (MonadResource m, ExceptionCarrier a) => a -> IO MagickBooleanType -> m ()
withException_ a f = liftIO $ f >>= \x -> void $ unless (x==mTrue) (getException a >>= throw)
-- TODO find some better way around IO + MonadResource
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
{-# INLINE toMBool #-}