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