repa-flow-4.2.2.1: Data/Repa/Flow/Auto/ZipWith.hs
module Data.Repa.Flow.Auto.ZipWith
( zipWith3_i
, zipWith4_i
, zipWith5_i
, zipWith6_i
, zipWith7_i)
where
import Data.Repa.Flow.Auto.Base
import Data.Repa.Array.Auto
import Data.Repa.Array.Material.Auto (Name(..))
import qualified Data.Repa.Flow.Chunked as C hiding (next)
#include "repa-flow.h"
-- | Combine corresponding elements of three sources with the given function.
---
-- TODO: do this chunkwise instead.
-- The core code has probably had an unswitch explosion.
--
zipWith3_i
:: ( Flow a, Flow b, Flow c
, Build b, Build c, Build d)
=> (a -> b -> c -> d)
-> Sources a -> Sources b -> Sources c
-> IO (Sources d)
zipWith3_i f sa sb sc
= C.szipWith_ii A (\_ a (b, c) -> f a b c) sa
=<< C.szipWith_ii A (\_ b c -> (b, c)) sb sc
{-# INLINE zipWith3_i #-}
-- | Combine corresponding elements of four sources with the given function.
---
-- TODO: do this chunkwise instead.
-- The core code has probably had an unswitch explosion.
--
zipWith4_i
:: ( Flow a, Flow b, Flow c, Flow d
, Build a, Build b, Build c, Build d, Build e)
=> (a -> b -> c -> d -> e)
-> Sources a -> Sources b -> Sources c -> Sources d
-> IO (Sources e)
zipWith4_i f sa sb sc sd
= do sab <- C.szipWith_ii A (\_ a b -> (a, b)) sa sb
scd <- C.szipWith_ii A (\_ c d -> (c, d)) sc sd
result <- C.szipWith_ii A (\_ (a, b) (c, d) -> f a b c d) sab scd
return result
{-# NOINLINE zipWith4_i #-}
-- NOINLINE due to unswitch explosion.
-- | Combine corresponding elements of five sources with the given function.
---
-- TODO: do this chunkwise instead.
-- The core code has probably had an unswitch explosion.
--
zipWith5_i
:: ( Flow a, Flow b, Flow c, Flow d, Flow e
, Build a, Build b, Build c, Build d, Build e
, Build f)
=> (a -> b -> c -> d -> e -> f)
-> Sources a -> Sources b -> Sources c -> Sources d -> Sources e
-> IO (Sources f)
zipWith5_i f sa sb sc sd se
= do sab <- C.szipWith_ii A (\_ a b -> (a, b)) sa sb
scd <- C.szipWith_ii A (\_ c d -> (c, d)) sc sd
result <- zipWith3_i (\(a, b) (c, d) e -> f a b c d e)
sab scd se
return result
{-# NOINLINE zipWith5_i #-}
-- NOINLINE due to unswitch explosion.
-- | Combine corresponding elements of six sources with the given function.
---
-- TODO: do this chunkwise instead.
-- The core code has probably had an unswitch explosion.
--
zipWith6_i
:: ( Flow a, Flow b, Flow c, Flow d, Flow e, Flow f
, Build a, Build b, Build c, Build d, Build e, Build f
, Build g)
=> (a -> b -> c -> d -> e -> f -> g)
-> Sources a -> Sources b -> Sources c -> Sources d -> Sources e -> Sources f
-> IO (Sources g)
zipWith6_i ff sa sb sc sd se sf
= do sab <- C.szipWith_ii A (\_ a b -> (a, b)) sa sb
scd <- C.szipWith_ii A (\_ c d -> (c, d)) sc sd
result <- zipWith4_i (\(a, b) (c, d) e f -> ff a b c d e f)
sab scd se sf
return result
{-# NOINLINE zipWith6_i #-}
-- NOINLINE due to unswitch explosion.
-- | Combine corresponding elements of seven sources with the given function.
---
-- TODO: do this chunkwise instead.
-- The core code has probably had an unswitch explosion.
--
zipWith7_i
:: ( Flow a, Flow b, Flow c, Flow d, Flow e, Flow f, Flow g
, Build a, Build b, Build c, Build d, Build e, Build f, Build g
, Build h)
=> (a -> b -> c -> d -> e -> f -> g -> h)
-> Sources a -> Sources b -> Sources c -> Sources d -> Sources e -> Sources f -> Sources g
-> IO (Sources h)
zipWith7_i ff sa sb sc sd se sf sg
= do sab <- C.szipWith_ii A (\_ a b -> (a, b)) sa sb
scd <- C.szipWith_ii A (\_ c d -> (c, d)) sc sd
result <- zipWith5_i (\(a, b) (c, d) e f g -> ff a b c d e f g)
sab scd se sf sg
return result
{-# NOINLINE zipWith7_i #-}
-- NOINLINE due to unswitch explosion.