{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE ViewPatterns #-}
module ArrayFire.Algorithm where
import ArrayFire.FFI
import ArrayFire.Internal.Algorithm
import ArrayFire.Internal.Types
sum
:: AFType a
=> Array a
-> Int
-> Array a
sum :: forall a. AFType a => Array a -> Int -> Array a
sum Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = (Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_sum Ptr AFArray
p AFArray
a CInt
n))
sumNaN
:: (Fractional a, AFType a)
=> Array a
-> Int
-> Double
-> Array a
sumNaN :: forall a.
(Fractional a, AFType a) =>
Array a -> Int -> Double -> Array a
sumNaN Array a
n (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
i) Double
d = (Array a
n Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> Double -> IO AFErr
af_sum_nan Ptr AFArray
p AFArray
a CInt
i Double
d))
product
:: AFType a
=> Array a
-> Int
-> Array a
product :: forall a. AFType a => Array a -> Int -> Array a
product Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = (Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_product Ptr AFArray
p AFArray
a CInt
n))
productNaN
:: (AFType a, Fractional a)
=> Array a
-> Int
-> Double
-> Array a
productNaN :: forall a.
(AFType a, Fractional a) =>
Array a -> Int -> Double -> Array a
productNaN Array a
n (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
i) Double
d = Array a
n Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> Double -> IO AFErr
af_product_nan Ptr AFArray
p AFArray
a CInt
i Double
d)
min
:: AFType a
=> Array a
-> Int
-> Array a
min :: forall a. AFType a => Array a -> Int -> Array a
min Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_min Ptr AFArray
p AFArray
a CInt
n)
max
:: AFType a
=> Array a
-> Int
-> Array a
max :: forall a. AFType a => Array a -> Int -> Array a
max Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_max Ptr AFArray
p AFArray
a CInt
n)
allTrue
:: forall a. AFType a
=> Array a
-> Int
-> Array a
allTrue :: forall a. AFType a => Array a -> Int -> Array a
allTrue Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) =
Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_all_true Ptr AFArray
p AFArray
a CInt
n)
anyTrue
:: forall a . AFType a
=> Array a
-> Int
-> Array a
anyTrue :: forall a. AFType a => Array a -> Int -> Array a
anyTrue Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) =
(Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_any_true Ptr AFArray
p AFArray
a CInt
n))
count
:: forall a . AFType a
=> Array a
-> Int
-> Array Int
count :: forall a. AFType a => Array a -> Int -> Array Int
count Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array Int
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1d` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_count Ptr AFArray
p AFArray
a CInt
n)
sumAll
:: AFType a
=> Array a
-> (Double, Double)
sumAll :: forall a. AFType a => Array a -> (Double, Double)
sumAll = (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_sum_all)
sumNaNAll
:: (AFType a, Fractional a)
=> Array a
-> Double
-> (Double, Double)
sumNaNAll :: forall a.
(AFType a, Fractional a) =>
Array a -> Double -> (Double, Double)
sumNaNAll Array a
a Double
d = Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
infoFromArray2 Array a
a (\Ptr Double
p Ptr Double
g AFArray
x -> Ptr Double -> Ptr Double -> AFArray -> Double -> IO AFErr
af_sum_nan_all Ptr Double
p Ptr Double
g AFArray
x Double
d)
productAll
:: AFType a
=> Array a
-> (Double, Double)
productAll :: forall a. AFType a => Array a -> (Double, Double)
productAll = (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_product_all)
productNaNAll
:: (AFType a, Fractional a)
=> Array a
-> Double
-> (Double, Double)
productNaNAll :: forall a.
(AFType a, Fractional a) =>
Array a -> Double -> (Double, Double)
productNaNAll Array a
a Double
d = Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
infoFromArray2 Array a
a (\Ptr Double
p Ptr Double
x AFArray
y -> Ptr Double -> Ptr Double -> AFArray -> Double -> IO AFErr
af_product_nan_all Ptr Double
p Ptr Double
x AFArray
y Double
d)
minAll
:: AFType a
=> Array a
-> (Double, Double)
minAll :: forall a. AFType a => Array a -> (Double, Double)
minAll = (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_min_all)
maxAll
:: AFType a
=> Array a
-> (Double, Double)
maxAll :: forall a. AFType a => Array a -> (Double, Double)
maxAll = (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_max_all)
allTrueAll
:: AFType a
=> Array a
-> (Double, Double)
allTrueAll :: forall a. AFType a => Array a -> (Double, Double)
allTrueAll = (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_all_true_all)
anyTrueAll
:: AFType a
=> Array a
-> (Double, Double)
anyTrueAll :: forall a. AFType a => Array a -> (Double, Double)
anyTrueAll = (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_any_true_all)
countAll
:: AFType a
=> Array a
-> (Double, Double)
countAll :: forall a. AFType a => Array a -> (Double, Double)
countAll = (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_count_all)
imin
:: AFType a
=> Array a
-> Int
-> (Array a, Array a)
imin :: forall a. AFType a => Array a -> Int -> (Array a, Array a)
imin Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
op2p Array a
a (\Ptr AFArray
x Ptr AFArray
y AFArray
z -> Ptr AFArray -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_imin Ptr AFArray
x Ptr AFArray
y AFArray
z CInt
n)
imax
:: AFType a
=> Array a
-> Int
-> (Array a, Array a)
imax :: forall a. AFType a => Array a -> Int -> (Array a, Array a)
imax Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
op2p Array a
a (\Ptr AFArray
x Ptr AFArray
y AFArray
z -> Ptr AFArray -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_imax Ptr AFArray
x Ptr AFArray
y AFArray
z CInt
n)
iminAll
:: AFType a
=> Array a
-> (Double, Double, Int)
iminAll :: forall a. AFType a => Array a -> (Double, Double, Int)
iminAll Array a
a = do
let (Double
x,Double
y,CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
z) = Array a
a Array a
-> (Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr)
-> (Double, Double, CUInt)
forall a b c arr.
(Storable a, Storable b, Storable c) =>
Array arr
-> (Ptr a -> Ptr b -> Ptr c -> AFArray -> IO AFErr) -> (a, b, c)
`infoFromArray3` Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr
af_imin_all
(Double
x,Double
y,Int
z)
imaxAll
:: AFType a
=> Array a
-> (Double, Double, Int)
imaxAll :: forall a. AFType a => Array a -> (Double, Double, Int)
imaxAll Array a
a = do
let (Double
x,Double
y,CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
z) = Array a
a Array a
-> (Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr)
-> (Double, Double, CUInt)
forall a b c arr.
(Storable a, Storable b, Storable c) =>
Array arr
-> (Ptr a -> Ptr b -> Ptr c -> AFArray -> IO AFErr) -> (a, b, c)
`infoFromArray3` Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr
af_imax_all
(Double
x,Double
y,Int
z)
accum
:: AFType a
=> Array a
-> Int
-> Array a
accum :: forall a. AFType a => Array a -> Int -> Array a
accum Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
x AFArray
y -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_accum Ptr AFArray
x AFArray
y CInt
n)
scan
:: AFType a
=> Array a
-> Int
-> BinaryOp
-> Bool
-> Array a
scan :: forall a. AFType a => Array a -> Int -> BinaryOp -> Bool -> Array a
scan Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
d) BinaryOp
op (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
inclusive) =
Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
x AFArray
y -> Ptr AFArray -> AFArray -> CInt -> AFBinaryOp -> CBool -> IO AFErr
af_scan Ptr AFArray
x AFArray
y CInt
d (BinaryOp -> AFBinaryOp
toBinaryOp BinaryOp
op) CBool
inclusive)
scanByKey
:: (AFType a, AFType k)
=> Array k
-> Array a
-> Int
-> BinaryOp
-> Bool
-> Array a
scanByKey :: forall a k.
(AFType a, AFType k) =>
Array k -> Array a -> Int -> BinaryOp -> Bool -> Array a
scanByKey Array k
a Array a
b (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
d) BinaryOp
op (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
inclusive) =
Array k
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
op2 Array k
a Array a
b (\Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray
-> AFArray -> AFArray -> CInt -> AFBinaryOp -> CBool -> IO AFErr
af_scan_by_key Ptr AFArray
x AFArray
y AFArray
z CInt
d (BinaryOp -> AFBinaryOp
toBinaryOp BinaryOp
op) CBool
inclusive)
where'
:: AFType a
=> Array a
-> Array a
where' :: forall a. AFType a => Array a -> Array a
where' = (Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` Ptr AFArray -> AFArray -> IO AFErr
af_where)
diff1
:: AFType a
=> Array a
-> Int
-> Array a
diff1 :: forall a. AFType a => Array a -> Int -> Array a
diff1 Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
x -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_diff1 Ptr AFArray
p AFArray
x CInt
n)
diff2
:: AFType a
=> Array a
-> Int
-> Array a
diff2 :: forall a. AFType a => Array a -> Int -> Array a
diff2 Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
x -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_diff2 Ptr AFArray
p AFArray
x CInt
n)
sort
:: AFType a
=> Array a
-> Int
-> Bool
-> Array a
sort :: forall a. AFType a => Array a -> Int -> Bool -> Array a
sort Array a
a (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CUInt
n) (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
`op1` (\Ptr AFArray
p AFArray
x -> Ptr AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
af_sort Ptr AFArray
p AFArray
x CUInt
n CBool
b)
sortIndex
:: AFType a
=> Array a
-> Int
-> Bool
-> (Array a, Array a)
sortIndex :: forall a. AFType a => Array a -> Int -> Bool -> (Array a, Array a)
sortIndex Array a
a (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CUInt
n) (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
a Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
`op2p` (\Ptr AFArray
p1 Ptr AFArray
p2 AFArray
p3 -> Ptr AFArray -> Ptr AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
af_sort_index Ptr AFArray
p1 Ptr AFArray
p2 AFArray
p3 CUInt
n CBool
b)
sortByKey
:: AFType a
=> Array a
-> Array a
-> Int
-> Bool
-> (Array a, Array a)
sortByKey :: forall a.
AFType a =>
Array a -> Array a -> Int -> Bool -> (Array a, Array a)
sortByKey Array a
a1 Array a
a2 (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CUInt
n) (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a.
Array a
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
op2p2 Array a
a1 Array a
a2 (\Ptr AFArray
w Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
af_sort_by_key Ptr AFArray
w Ptr AFArray
x AFArray
y AFArray
z CUInt
n CBool
b)
setUnique
:: AFType a
=> Array a
-> Bool
-> Array a
setUnique :: forall a. AFType a => Array a -> Bool -> Array a
setUnique Array a
a (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
op1 Array a
a (\Ptr AFArray
x AFArray
y -> Ptr AFArray -> AFArray -> CBool -> IO AFErr
af_set_unique Ptr AFArray
x AFArray
y CBool
b)
setUnion
:: AFType a
=> Array a
-> Array a
-> Bool
-> Array a
setUnion :: forall a. AFType a => Array a -> Array a -> Bool -> Array a
setUnion Array a
a1 Array a
a2 (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
op2 Array a
a1 Array a
a2 (\Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray -> AFArray -> AFArray -> CBool -> IO AFErr
af_set_union Ptr AFArray
x AFArray
y AFArray
z CBool
b)
setIntersect
:: AFType a
=> Array a
-> Array a
-> Bool
-> Array a
setIntersect :: forall a. AFType a => Array a -> Array a -> Bool -> Array a
setIntersect Array a
a1 Array a
a2 (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
op2 Array a
a1 Array a
a2 (\Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray -> AFArray -> AFArray -> CBool -> IO AFErr
af_set_intersect Ptr AFArray
x AFArray
y AFArray
z CBool
b)