    -----------------------------------------------------------------------------
    -- |
    -- Module      : Data.Array.Parallel.Unlifted.Sequential.Segmented.Permute
    -- Copyright   : (c) [2001..2002] Manuel M T Chakravarty & Gabriele Keller
    --		 (c) 2006         Manuel M T Chakravarty & Roman Leshchinskiy
    -- License     : see libraries/ndp/LICENSE
    --
    -- Maintainer  : Roman Leshchinskiy <rl@cse.unsw.edu.au>
    -- Stability   : internal
    -- Portability : portable
    --
    -- Description ---------------------------------------------------------------
    --
    --  Permutations of segmented unlifted arrays.
    --
    -- Todo ----------------------------------------------------------------------
    --

    {-# LANGUAGE CPP #-}

    #include "fusion-phases.h"

    module Data.Array.Parallel.Unlifted.Sequential.Segmented.Permute (
      bpermuteSU, bpermuteSU'
    ) where

    import Data.Array.Parallel.Unlifted.Sequential.Flat (
      UA, UArr, bpermuteU)
    import Data.Array.Parallel.Unlifted.Sequential.Segmented.SUArr (
      SUArr, segdSU, (>:))
    import Data.Array.Parallel.Unlifted.Sequential.Segmented.Basics (
      concatSU)

    bpermuteSU' :: UA e => UArr e -> SUArr Int -> SUArr e
    {-# INLINE_U bpermuteSU' #-}
    bpermuteSU' es is = segdSU is >: bpermuteU es (concatSU is)

    -- |Segmented back permute
    --
    bpermuteSU :: UA e => SUArr e -> SUArr Int -> SUArr e
    {-# INLINE_U bpermuteSU #-}
    bpermuteSU as = error "Not implemented: bpermuteSU"
    {-
    bpermuteSU as = loopArrS . loopSU extract nextOff 0
    	        where
    		  (segd :*: a) = flattenSU as
    		  psum	       = psumUS segd
    		  --
    	          extract off i = (off :*: (JustS $ a!:(off + i)))
    		  --
    		  nextOff _ segi = (psum !: (segi + 1) :*:
    				    (NothingS::MaybeS ()))
    -}