{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE CPP, NoImplicitPrelude #-}
module Foreign.Marshal.Error (
throwIf,
throwIf_,
throwIfNeg,
throwIfNeg_,
throwIfNull,
void
) where
import Foreign.Ptr
import GHC.Base
import GHC.Num
import GHC.IO.Exception
throwIf :: (a -> Bool)
-> (a -> String)
-> IO a
-> IO a
throwIf :: (a -> Bool) -> (a -> String) -> IO a -> IO a
throwIf pred :: a -> Bool
pred msgfct :: a -> String
msgfct act :: IO a
act =
do
a
res <- IO a
act
(if a -> Bool
pred a
res then IOError -> IO a
forall a. IOError -> IO a
ioError (IOError -> IO a) -> (a -> IOError) -> a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IOError
userError (String -> IOError) -> (a -> String) -> a -> IOError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
msgfct else a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return) a
res
throwIf_ :: (a -> Bool) -> (a -> String) -> IO a -> IO ()
throwIf_ :: (a -> Bool) -> (a -> String) -> IO a -> IO ()
throwIf_ pred :: a -> Bool
pred msgfct :: a -> String
msgfct act :: IO a
act = IO a -> IO ()
forall a. IO a -> IO ()
void (IO a -> IO ()) -> IO a -> IO ()
forall a b. (a -> b) -> a -> b
$ (a -> Bool) -> (a -> String) -> IO a -> IO a
forall a. (a -> Bool) -> (a -> String) -> IO a -> IO a
throwIf a -> Bool
pred a -> String
msgfct IO a
act
throwIfNeg :: (Ord a, Num a) => (a -> String) -> IO a -> IO a
throwIfNeg :: (a -> String) -> IO a -> IO a
throwIfNeg = (a -> Bool) -> (a -> String) -> IO a -> IO a
forall a. (a -> Bool) -> (a -> String) -> IO a -> IO a
throwIf (a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< 0)
throwIfNeg_ :: (Ord a, Num a) => (a -> String) -> IO a -> IO ()
throwIfNeg_ :: (a -> String) -> IO a -> IO ()
throwIfNeg_ = (a -> Bool) -> (a -> String) -> IO a -> IO ()
forall a. (a -> Bool) -> (a -> String) -> IO a -> IO ()
throwIf_ (a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< 0)
throwIfNull :: String -> IO (Ptr a) -> IO (Ptr a)
throwIfNull :: String -> IO (Ptr a) -> IO (Ptr a)
throwIfNull = (Ptr a -> Bool) -> (Ptr a -> String) -> IO (Ptr a) -> IO (Ptr a)
forall a. (a -> Bool) -> (a -> String) -> IO a -> IO a
throwIf (Ptr a -> Ptr a -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr a
forall a. Ptr a
nullPtr) ((Ptr a -> String) -> IO (Ptr a) -> IO (Ptr a))
-> (String -> Ptr a -> String)
-> String
-> IO (Ptr a)
-> IO (Ptr a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Ptr a -> String
forall a b. a -> b -> a
const
void :: IO a -> IO ()
void :: IO a -> IO ()
void act :: IO a
act = IO a
act IO a -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
{-# DEPRECATED void "use 'Control.Monad.void' instead" #-}