module Foreign.CUDA.Solver.Internal.C2HS (
cIntConv, cFloatConv, cToBool, cFromBool, cToEnum, cFromEnum,
withComplex,
peekIntConv, peekFloatConv,
) where
import Control.Monad
import Data.Complex
import Foreign
import Foreign.C
import Foreign.Storable.Complex ()
{-# INLINE cIntConv #-}
cIntConv :: (Integral a, Integral b) => a -> b
cIntConv :: a -> b
cIntConv = a -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral
{-# INLINE [1] cFloatConv #-}
cFloatConv :: (RealFloat a, RealFloat b) => a -> b
cFloatConv :: a -> b
cFloatConv = a -> b
forall a b. (Real a, Fractional b) => a -> b
realToFrac
{-# RULES
"cFloatConv/Float->Float" forall (x::Float). cFloatConv x = x;
"cFloatConv/Double->Double" forall (x::Double). cFloatConv x = x;
"cFloatConv/Float->CFloat" forall (x::Float). cFloatConv x = CFloat x;
"cFloatConv/CFloat->Float" forall (x::Float). cFloatConv CFloat x = x;
"cFloatConv/Double->CDouble" forall (x::Double). cFloatConv x = CDouble x;
"cFloatConv/CDouble->Double" forall (x::Double). cFloatConv CDouble x = x
#-}
{-# INLINE cFromBool #-}
cFromBool :: Num a => Bool -> a
cFromBool :: Bool -> a
cFromBool = Bool -> a
forall a. Num a => Bool -> a
fromBool
{-# INLINE cToBool #-}
cToBool :: (Eq a, Num a) => a -> Bool
cToBool :: a -> Bool
cToBool = a -> Bool
forall a. (Eq a, Num a) => a -> Bool
toBool
{-# INLINE cToEnum #-}
cToEnum :: (Integral i, Enum e) => i -> e
cToEnum :: i -> e
cToEnum = Int -> e
forall a. Enum a => Int -> a
toEnum (Int -> e) -> (i -> Int) -> i -> e
forall b c a. (b -> c) -> (a -> b) -> a -> c
. i -> Int
forall a b. (Integral a, Integral b) => a -> b
cIntConv
{-# INLINE cFromEnum #-}
cFromEnum :: (Enum e, Integral i) => e -> i
= Int -> i
forall a b. (Integral a, Integral b) => a -> b
cIntConv (Int -> i) -> (e -> Int) -> e -> i
forall b c a. (b -> c) -> (a -> b) -> a -> c
. e -> Int
forall a. Enum a => a -> Int
fromEnum
{-# INLINE withComplex #-}
withComplex :: Storable a => Complex a -> (Ptr () -> IO b) -> IO b
withComplex :: Complex a -> (Ptr () -> IO b) -> IO b
withComplex Complex a
c Ptr () -> IO b
f = Complex a -> (Ptr (Complex a) -> IO b) -> IO b
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Complex a
c (Ptr () -> IO b
f (Ptr () -> IO b)
-> (Ptr (Complex a) -> Ptr ()) -> Ptr (Complex a) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Complex a) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr)
{-# INLINE peekIntConv #-}
peekIntConv :: (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv :: Ptr a -> IO b
peekIntConv = (a -> b) -> IO a -> IO b
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> b
forall a b. (Integral a, Integral b) => a -> b
cIntConv (IO a -> IO b) -> (Ptr a -> IO a) -> Ptr a -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr a -> IO a
forall a. Storable a => Ptr a -> IO a
peek
{-# INLINE peekFloatConv #-}
peekFloatConv :: (Storable a, RealFloat a, RealFloat b) => Ptr a -> IO b
peekFloatConv :: Ptr a -> IO b
peekFloatConv = (a -> b) -> IO a -> IO b
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> b
forall a b. (RealFloat a, RealFloat b) => a -> b
cFloatConv (IO a -> IO b) -> (Ptr a -> IO a) -> Ptr a -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr a -> IO a
forall a. Storable a => Ptr a -> IO a
peek