module Pipelines where

import Data.Array.Parallel.Unlifted

pipe1 :: UArr Int -> UArr Int -> UArr Int
pipe1 xs ys = mapU (+1) (xs +:+ ys)
{-# NOINLINE pipe1 #-}

pipe2 :: UArr Int -> UArr Int
pipe2 = mapU (+1) . tailU
{-# NOINLINE pipe2 #-}

pipe3 :: UArr Int -> Int
pipe3 = maximumU . scan1U (+)
{-# NOINLINE pipe3 #-}

pipe4 :: SUArr Int -> Int
pipe4 = maximumU . sumSU
{-# NOINLINE pipe4 #-}

pipe5 :: UArr Int -> UArr Int
{-# NOINLINE pipe5 #-}
pipe5 xs = sumSU (replicateSU (replicateU (lengthU xs) 5) xs)

