dph-examples-0.7.0.3: examples/smoke/sharing/Reverse/Vector.hs
module Vector (treeReverse) where
import qualified Data.Vector.Unboxed as V
import Data.Vector.Unboxed (Vector)
-- | Reverse the elements in an array using a tree.
treeReverse :: Vector Int -> Vector Int
{-# NOINLINE treeReverse #-}
treeReverse xx
| V.length xx == 1
= xx
| otherwise
= let len = V.length xx
half = len `div` 2
s1 = V.slice 0 half xx
s2 = V.slice half half xx
in treeReverse s2 V.++ treeReverse s1