module Numeric.Common ( conjugate
                      , asTest
                      ) where

import           Foreign.C

asTest :: Integral a => (CInt -> CBool) -> a -> Bool
asTest :: (CInt -> CBool) -> a -> Bool
asTest f :: CInt -> CBool
f = CBool -> Bool
convertBool (CBool -> Bool) -> (a -> CBool) -> a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> CBool
f (CInt -> CBool) -> (a -> CInt) -> a -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral

conjugate :: (Integral a, Integral b) => (CInt -> CInt) -> a -> b
conjugate :: (CInt -> CInt) -> a -> b
conjugate f :: CInt -> CInt
f = CInt -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> b) -> (a -> CInt) -> a -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> CInt
f (CInt -> CInt) -> (a -> CInt) -> a -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral

convertBool :: CBool -> Bool
convertBool :: CBool -> Bool
convertBool = Int -> Bool
forall a. Enum a => Int -> a
toEnum (Int -> Bool) -> (CBool -> Int) -> CBool -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CBool -> Int
forall a. Enum a => a -> Int
fromEnum