{-# LANGUAGE KindSignatures      #-}
{-# LANGUAGE DataKinds           #-}
{-# LANGUAGE FlexibleContexts    #-}
{-# LANGUAGE FlexibleInstances   #-}
{-# LANGUAGE RankNTypes          #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators       #-}
{-# LANGUAGE CPP                 #-}
module Data.Vector.Storable.Sized
 ( Vector
  , VSM.MVector
   
   
  , length
  , length'
  , knownLength
  , knownLength'
    
  , index
  , index'
  , unsafeIndex
  , head
  , last
    
  , indexM
  , indexM'
  , unsafeIndexM
  , headM
  , lastM
    
  , slice
  , slice'
  , init
  , tail
  , take
  , take'
  , drop
  , drop'
  , splitAt
  , splitAt'
    
    
  , empty
  , singleton
  , fromTuple
  , replicate
  , replicate'
  , generate
  , generate'
  , iterateN
  , iterateN'
    
  , replicateM
  , replicateM'
  , generateM
  , generateM'
    
  , unfoldrN
  , unfoldrN'
    
  , enumFromN
  , enumFromN'
  , enumFromStepN
  , enumFromStepN'
    
  , cons
  , snoc
  , (++)
    
  , force
    
    
  , (//)
  , update
  , update_
  , unsafeUpd
  , unsafeUpdate
  , unsafeUpdate_
    
  , accum
  , accumulate
  , accumulate_
  , unsafeAccum
  , unsafeAccumulate
  , unsafeAccumulate_
    
  , reverse
  , backpermute
  , unsafeBackpermute
    
  , ix
  , _head
  , _last
    
    
  , indexed
    
  , map
  , imap
  , concatMap
    
  , mapM
  , imapM
  , mapM_
  , imapM_
  , forM
  , forM_
    
  , zipWith
  , zipWith3
  , zipWith4
  , zipWith5
  , zipWith6
  , izipWith
  , izipWith3
  , izipWith4
  , izipWith5
  , izipWith6
  , zip
  , zip3
  , zip4
  , zip5
  , zip6
    
  , zipWithM
  , izipWithM
  , zipWithM_
  , izipWithM_
    
  , unzip
  , unzip3
  , unzip4
  , unzip5
  , unzip6
    
    
  , elem
  , notElem
  , find
  , findIndex
  , elemIndex
    
  , foldl
  , foldl1
  , foldl'
  , foldl1'
  , foldr
  , foldr1
  , foldr'
  , foldr1'
  , ifoldl
  , ifoldl'
  , ifoldr
  , ifoldr'
    
  , all
  , any
  , and
  , or
  , sum
  , product
  , maximum
  , maximumBy
  , minimum
  , minimumBy
  , maxIndex
  , maxIndexBy
  , minIndex
  , minIndexBy
    
  , foldM
  , ifoldM
  , fold1M
  , foldM'
  , ifoldM'
  , fold1M'
  , foldM_
  , ifoldM_
  , fold1M_
  , foldM'_
  , ifoldM'_
  , fold1M'_
    
  , sequence
  , sequence_
    
  , prescanl
  , prescanl'
  , postscanl
  , postscanl'
  , scanl
  , scanl'
  , scanl1
  , scanl1'
  , prescanr
  , prescanr'
  , postscanr
  , postscanr'
  , scanr
  , scanr'
  , scanr1
  , scanr1'
    
    
  , toList
  , fromList
  , fromListN
  , fromListN'
  , withSizedList
    
  , freeze
  , thaw
  , copy
  , unsafeFreeze
  , unsafeThaw
    
  , toSized
  , withSized
  , fromSized
  , withVectorUnsafe
  ) where
import qualified Data.Vector.Generic.Sized as V
import qualified Data.Vector.Storable as VS
import Data.IndexedListLiterals (IndexedListLiterals)
import qualified Data.Vector.Storable.Mutable.Sized as VSM
import GHC.TypeLits
import Data.Finite
import Data.Proxy
import Control.Monad.Primitive
import Foreign.Storable
import Prelude hiding ( length, null,
                        replicate, (++), concat,
                        head, last,
                        init, tail, take, drop, splitAt, reverse,
                        map, concat, concatMap,
                        zipWith, zipWith3, zip, zip3, unzip, unzip3,
                        filter, takeWhile, dropWhile, span, break,
                        elem, notElem,
                        foldl, foldl1, foldr, foldr1,
                        all, any, and, or, sum, product, maximum, minimum,
                        scanl, scanl1, scanr, scanr1,
                        enumFromTo, enumFromThenTo,
                        mapM, mapM_, sequence, sequence_,
                        showsPrec )
type Vector = V.Vector VS.Vector
length :: forall n a. KnownNat n
       => Vector n a -> Int
length = V.length
{-# inline length #-}
length' :: forall n a.
           Vector n a -> Proxy n
length' = V.length'
{-# inline length' #-}
knownLength :: forall n a r. Storable a
            => Vector n a 
            -> (KnownNat n => r) 
            -> r 
knownLength = V.knownLength
knownLength' :: forall n a r. Storable a
             => Vector n a 
             -> (KnownNat n => Proxy n -> r) 
             -> r 
knownLength' = V.knownLength'
index :: forall n a. Storable a
      => Vector n a -> Finite n -> a
index = V.index
{-# inline index #-}
index' :: forall n m a p. (KnownNat n, Storable a)
       => Vector (n+m+1) a -> p n -> a
index' = V.index'
{-# inline index' #-}
unsafeIndex :: forall n a. Storable a
      => Vector n a -> Int -> a
unsafeIndex = V.unsafeIndex
{-# inline unsafeIndex #-}
head :: forall n a. (Storable a)
     => Vector (1+n) a -> a
head = V.head
{-# inline head #-}
last :: forall n a. (Storable a)
     => Vector (n+1) a -> a
last = V.last
{-# inline last #-}
ix :: forall n a f. (Storable a, Functor f)
   => Finite n -> (a -> f a) -> Vector n a -> f (Vector n a)
ix = V.ix
{-# inline ix #-}
_head :: forall n a f. (Storable a, Functor f)
      => (a -> f a) -> Vector (1+n) a -> f (Vector (1+n) a)
_head = V._head
{-# inline _head #-}
_last :: forall n a f. (Storable a, Functor f)
       => (a -> f a) -> Vector (n+1) a -> f (Vector (n+1) a)
_last = V._last
{-# inline _last #-}
indexM :: forall n a m. (Storable a, Monad m)
      => Vector n a -> Finite n -> m a
indexM = V.indexM
{-# inline indexM #-}
indexM' :: forall n k a m p. (KnownNat n, Storable a, Monad m)
      => Vector (n+k) a -> p n -> m a
indexM' = V.indexM'
{-# inline indexM' #-}
unsafeIndexM :: forall n a m. (Storable a, Monad m)
      => Vector n a -> Int -> m a
unsafeIndexM = V.unsafeIndexM
{-# inline unsafeIndexM #-}
headM :: forall n a m. (Storable a, Monad m)
      => Vector (1+n) a -> m a
headM = V.headM
{-# inline headM #-}
lastM :: forall n a m. (Storable a, Monad m)
      => Vector (n+1) a -> m a
lastM = V.lastM
{-# inline lastM #-}
slice :: forall i n m a p. (KnownNat i, KnownNat n, Storable a)
      => p i 
      -> Vector (i+n+m) a
      -> Vector n a
slice = V.slice
{-# inline slice #-}
slice' :: forall i n m a p. (KnownNat i, KnownNat n, Storable a)
       => p i 
       -> p n 
       -> Vector (i+n+m) a
       -> Vector n a
slice' = V.slice'
{-# inline slice' #-}
init :: forall n a. (Storable a)
     => Vector (n+1) a -> Vector n a
init = V.init
{-# inline init #-}
tail :: forall n a. (Storable a)
     => Vector (1+n) a -> Vector n a
tail = V.tail
{-# inline tail #-}
take :: forall n m a. (KnownNat n, Storable a)
     => Vector (n+m) a -> Vector n a
take = V.take
{-# inline take #-}
take' :: forall n m a p. (KnownNat n, Storable a)
      => p n -> Vector (n+m) a -> Vector n a
take' = V.take'
{-# inline take' #-}
drop :: forall n m a. (KnownNat n, Storable a)
     => Vector (n+m) a -> Vector m a
drop = V.drop
{-# inline drop #-}
drop' :: forall n m a p. (KnownNat n, Storable a)
      => p n -> Vector (n+m) a -> Vector m a
drop' = V.drop'
{-# inline drop' #-}
splitAt :: forall n m a. (KnownNat n, Storable a)
        => Vector (n+m) a -> (Vector n a, Vector m a)
splitAt = V.splitAt
{-# inline splitAt #-}
splitAt' :: forall n m a p. (KnownNat n, Storable a)
         => p n -> Vector (n+m) a -> (Vector n a, Vector m a)
splitAt' = V.splitAt'
{-# inline splitAt' #-}
empty :: forall a. (Storable a)
      => Vector 0 a
empty = V.empty
{-# inline empty #-}
singleton :: forall a. (Storable a)
           => a -> Vector 1 a
singleton = V.singleton
{-# inline singleton #-}
fromTuple :: forall a input length.
             (Storable a, IndexedListLiterals input length a, KnownNat length)
          => input -> Vector length a
fromTuple = V.fromTuple
{-# inline fromTuple #-}
replicate :: forall n a. (KnownNat n, Storable a)
          => a -> Vector n a
replicate = V.replicate
{-# inline replicate #-}
replicate' :: forall n a p. (KnownNat n, Storable a)
           => p n -> a -> Vector n a
replicate' = V.replicate'
{-# inline replicate' #-}
generate :: forall n a. (KnownNat n, Storable a)
         => (Finite n -> a) -> Vector n a
generate = V.generate
{-# inline generate #-}
generate' :: forall n a p. (KnownNat n, Storable a)
          => p n -> (Finite n -> a) -> Vector n a
generate' = V.generate'
{-# inline generate' #-}
iterateN :: forall n a. (KnownNat n, Storable a)
         => (a -> a) -> a -> Vector n a
iterateN = V.iterateN
{-# inline iterateN #-}
iterateN' :: forall n a p. (KnownNat n, Storable a)
          => p n -> (a -> a) -> a -> Vector n a
iterateN' = V.iterateN'
{-# inline iterateN' #-}
replicateM :: forall n m a. (KnownNat n, Storable a, Monad m)
           => m a -> m (Vector n a)
replicateM = V.replicateM
{-# inline replicateM #-}
replicateM' :: forall n m a p. (KnownNat n, Storable a, Monad m)
            => p n -> m a -> m (Vector n a)
replicateM' = V.replicateM'
{-# inline replicateM' #-}
generateM :: forall n m a. (KnownNat n, Storable a, Monad m)
          => (Finite n -> m a) -> m (Vector n a)
generateM = V.generateM
{-# inline generateM #-}
generateM' :: forall n m a p. (KnownNat n, Storable a, Monad m)
           => p n -> (Finite n -> m a) -> m (Vector n a)
generateM' = V.generateM'
{-# inline generateM' #-}
unfoldrN :: forall n a b. (KnownNat n, Storable a)
         => (b -> (a, b)) -> b -> Vector n a
unfoldrN = V.unfoldrN
{-# inline unfoldrN #-}
unfoldrN' :: forall n a b p. (KnownNat n, Storable a)
          => p n -> (b -> (a, b)) -> b -> Vector n a
unfoldrN' = V.unfoldrN'
{-# inline unfoldrN' #-}
enumFromN :: forall n a. (KnownNat n, Storable a, Num a)
          => a -> Vector n a
enumFromN = V.enumFromN
{-# inline enumFromN #-}
enumFromN' :: forall n a p. (KnownNat n, Storable a, Num a)
           => a -> p n -> Vector n a
enumFromN' = V.enumFromN'
{-# inline enumFromN' #-}
enumFromStepN :: forall n a. (KnownNat n, Storable a, Num a)
          => a -> a -> Vector n a
enumFromStepN = V.enumFromStepN
{-# inline enumFromStepN #-}
enumFromStepN' :: forall n a p. (KnownNat n, Storable a, Num a)
               => a -> a -> p n -> Vector n a
enumFromStepN' = V.enumFromStepN'
{-# inline enumFromStepN' #-}
cons :: forall n a. Storable a
     => a -> Vector n a -> Vector (1+n) a
cons = V.cons
{-# inline cons #-}
snoc :: forall n a. Storable a
     => Vector n a -> a -> Vector (n+1) a
snoc = V.snoc
{-# inline snoc #-}
(++) :: forall n m a. Storable a
     => Vector n a -> Vector m a -> Vector (n+m) a
(++) = (V.++)
{-# inline (++) #-}
force :: Storable a => Vector n a -> Vector n a
force = V.force
{-# inline force #-}
(//) :: (Storable a)
     => Vector m a      
     -> [(Finite m, a)] 
     -> Vector m a
(//) = (V.//)
{-# inline (//) #-}
update :: (Storable a, Storable (Int, a))
        => Vector m a        
        -> Vector n (Int, a) 
        -> Vector m a
update = V.update
{-# inline update #-}
update_ :: Storable a
        => Vector m a   
        -> Vector n Int 
        -> Vector n a   
        -> Vector m a
update_ = V.update_
{-# inline update_ #-}
unsafeUpd :: (Storable a)
          => Vector m a 
          -> [(Int, a)]   
          -> Vector m a
unsafeUpd = V.unsafeUpd
{-# inline unsafeUpd #-}
unsafeUpdate :: (Storable a, Storable (Int, a))
             => Vector m a        
             -> Vector n (Int, a) 
             -> Vector m a
unsafeUpdate = V.unsafeUpdate
{-# inline unsafeUpdate #-}
unsafeUpdate_ :: Storable a
              => Vector m a   
              -> Vector n Int 
              -> Vector n a   
              -> Vector m a
unsafeUpdate_ = V.unsafeUpdate_
{-# inline unsafeUpdate_ #-}
accum :: Storable a
      => (a -> b -> a) 
      -> Vector m a  
      -> [(Int,b)]     
      -> Vector m a
accum = V.accum
{-# inline accum #-}
accumulate :: (Storable a, Storable (Int, b))
           => (a -> b -> a)      
           -> Vector m a       
           -> Vector n (Int,b) 
           -> Vector m a
accumulate = V.accumulate
{-# inline accumulate #-}
accumulate_ :: (Storable a, Storable b)
            => (a -> b -> a)  
            -> Vector m a   
            -> Vector n Int 
            -> Vector n b   
            -> Vector m a
accumulate_ = V.accumulate_
{-# inline accumulate_ #-}
unsafeAccum :: Storable a
            => (a -> b -> a) 
            -> Vector m a  
            -> [(Int,b)]     
            -> Vector m a
unsafeAccum = V.unsafeAccum
{-# inline unsafeAccum #-}
unsafeAccumulate :: (Storable a, Storable (Int, b))
                 => (a -> b -> a)      
                 -> Vector m a       
                 -> Vector n (Int,b) 
                 -> Vector m a
unsafeAccumulate = V.unsafeAccumulate
{-# inline unsafeAccumulate #-}
unsafeAccumulate_ :: (Storable a, Storable b)
            => (a -> b -> a)  
            -> Vector m a   
            -> Vector n Int 
            -> Vector n b   
            -> Vector m a
unsafeAccumulate_ = V.unsafeAccumulate_
{-# inline unsafeAccumulate_ #-}
reverse :: (Storable a) => Vector n a -> Vector n a
reverse = V.reverse
{-# inline reverse #-}
backpermute :: Storable a
            => Vector m a   
            -> Vector n Int 
            -> Vector n a
backpermute = V.backpermute
{-# inline backpermute #-}
unsafeBackpermute :: Storable a
                  => Vector m a   
                  -> Vector n Int 
                  -> Vector n a
unsafeBackpermute = V.unsafeBackpermute
{-# inline unsafeBackpermute #-}
indexed :: (Storable a, Storable (Int, a), Storable (Finite n, a))
        => Vector n a -> Vector n (Finite n,a)
indexed = V.indexed
{-# inline indexed #-}
map :: (Storable a, Storable b)
    => (a -> b) -> Vector n a -> Vector n b
map = V.map
{-# inline map #-}
imap :: (Storable a, Storable b)
     => (Finite n -> a -> b) -> Vector n a -> Vector n b
imap = V.imap
{-# inline imap #-}
concatMap :: (Storable a, Storable b)
          => (a -> Vector m b) -> Vector n a -> Vector (n*m) b
concatMap = V.concatMap
{-# inline concatMap #-}
mapM :: (Monad m, Storable a, Storable b)
      => (a -> m b) -> Vector n a -> m (Vector n b)
mapM = V.mapM
{-# inline mapM #-}
imapM :: (Monad m, Storable a, Storable b)
      => (Finite n -> a -> m b) -> Vector n a -> m (Vector n b)
imapM = V.imapM
{-# inline imapM #-}
mapM_ :: (Monad m, Storable a) => (a -> m b) -> Vector n a -> m ()
mapM_ = V.mapM_
{-# inline mapM_ #-}
imapM_ :: (Monad m, Storable a) => (Finite n -> a -> m b) -> Vector n a -> m ()
imapM_ = V.imapM_
{-# inline imapM_ #-}
forM :: (Monad m, Storable a, Storable b)
     => Vector n a -> (a -> m b) -> m (Vector n b)
forM = V.forM
{-# inline forM #-}
forM_ :: (Monad m, Storable a) => Vector n a -> (a -> m b) -> m ()
forM_ = V.forM_
{-# inline forM_ #-}
zipWith :: (Storable a, Storable b, Storable c)
        => (a -> b -> c) -> Vector n a -> Vector n b -> Vector n c
zipWith = V.zipWith
{-# inline zipWith #-}
zipWith3 :: (Storable a, Storable b, Storable c, Storable d)
         => (a -> b -> c -> d) -> Vector n a -> Vector n b -> Vector n c -> Vector n d
zipWith3 = V.zipWith3
{-# inline zipWith3 #-}
zipWith4 :: (Storable a,Storable b,Storable c,Storable d,Storable e)
         => (a -> b -> c -> d -> e)
         -> Vector n a
         -> Vector n b
         -> Vector n c
         -> Vector n d
         -> Vector n e
zipWith4 = V.zipWith4
{-# inline zipWith4 #-}
zipWith5 :: (Storable a,Storable b,Storable c,Storable d,Storable e,Storable f)
         => (a -> b -> c -> d -> e -> f)
         -> Vector n a
         -> Vector n b
         -> Vector n c
         -> Vector n d
         -> Vector n e
         -> Vector n f
zipWith5 = V.zipWith5
{-# inline zipWith5 #-}
zipWith6 :: (Storable a,Storable b,Storable c,Storable d,Storable e,Storable f,Storable g)
         => (a -> b -> c -> d -> e -> f -> g)
         -> Vector n a
         -> Vector n b
         -> Vector n c
         -> Vector n d
         -> Vector n e
         -> Vector n f
         -> Vector n g
zipWith6 = V.zipWith6
{-# inline zipWith6 #-}
izipWith :: (Storable a,Storable b,Storable c)
         => (Finite n -> a -> b -> c)
         -> Vector n a
         -> Vector n b
         -> Vector n c
izipWith = V.izipWith
{-# inline izipWith #-}
izipWith3 :: (Storable a,Storable b,Storable c,Storable d)
          => (Finite n -> a -> b -> c -> d)
          -> Vector n a
          -> Vector n b
          -> Vector n c
          -> Vector n d
izipWith3 = V.izipWith3
{-# inline izipWith3 #-}
izipWith4 :: (Storable a,Storable b,Storable c,Storable d,Storable e)
          => (Finite n -> a -> b -> c -> d -> e)
          -> Vector n a
          -> Vector n b
          -> Vector n c
          -> Vector n d
          -> Vector n e
izipWith4 = V.izipWith4
{-# inline izipWith4 #-}
izipWith5 :: (Storable a,Storable b,Storable c,Storable d,Storable e,Storable f)
          => (Finite n -> a -> b -> c -> d -> e -> f)
          -> Vector n a
          -> Vector n b
          -> Vector n c
          -> Vector n d
          -> Vector n e
          -> Vector n f
izipWith5 = V.izipWith5
{-# inline izipWith5 #-}
izipWith6 :: (Storable a,Storable b,Storable c,Storable d,Storable e,Storable f,Storable g)
          => (Finite n -> a -> b -> c -> d -> e -> f -> g)
          -> Vector n a
          -> Vector n b
          -> Vector n c
          -> Vector n d
          -> Vector n e
          -> Vector n f
          -> Vector n g
izipWith6 = V.izipWith6
{-# inline izipWith6 #-}
zip :: (Storable a, Storable b, Storable (a,b))
    => Vector n a -> Vector n b -> Vector n (a, b)
zip = V.zip
{-# inline zip #-}
zip3 :: (Storable a, Storable b, Storable c, Storable (a, b, c))
     => Vector n a -> Vector n b -> Vector n c -> Vector n (a, b, c)
zip3 = V.zip3
{-# inline zip3 #-}
zip4 :: (Storable a,Storable b,Storable c,Storable d,Storable (a,b,c,d))
     => Vector n a
     -> Vector n b
     -> Vector n c
     -> Vector n d
     -> Vector n (a,b,c,d)
zip4 = V.zip4
{-# inline zip4 #-}
zip5 :: (Storable a,Storable b,Storable c,Storable d,Storable e,Storable (a,b,c,d,e))
     => Vector n a
     -> Vector n b
     -> Vector n c
     -> Vector n d
     -> Vector n e
     -> Vector n (a,b,c,d,e)
zip5 = V.zip5
{-# inline zip5 #-}
zip6 :: (Storable a,Storable b,Storable c,Storable d,Storable e,Storable f,Storable (a,b,c,d,e,f))
     => Vector n a
     -> Vector n b
     -> Vector n c
     -> Vector n d
     -> Vector n e
     -> Vector n f
     -> Vector n (a,b,c,d,e,f)
zip6 = V.zip6
{-# inline zip6 #-}
zipWithM :: (Monad m, Storable a, Storable b, Storable c)
         => (a -> b -> m c) -> Vector n a -> Vector n b -> m (Vector n c)
zipWithM = V.zipWithM
{-# inline zipWithM #-}
izipWithM :: (Monad m, Storable a, Storable b, Storable c)
         => (Finite n -> a -> b -> m c) -> Vector n a -> Vector n b -> m (Vector n c)
izipWithM = V.izipWithM
{-# inline izipWithM #-}
zipWithM_ :: (Monad m, Storable a, Storable b)
          => (a -> b -> m c) -> Vector n a -> Vector n b -> m ()
zipWithM_ = V.zipWithM_
{-# inline zipWithM_ #-}
izipWithM_ :: (Monad m, Storable a, Storable b)
           => (Finite n -> a -> b -> m c) -> Vector n a -> Vector n b -> m ()
izipWithM_ = V.izipWithM_
{-# inline izipWithM_ #-}
unzip :: (Storable a, Storable b, Storable (a,b))
      => Vector n (a, b) -> (Vector n a, Vector n b)
unzip = V.unzip
{-# inline unzip #-}
unzip3 :: (Storable a, Storable b, Storable c, Storable (a, b, c))
       => Vector n (a, b, c) -> (Vector n a, Vector n b, Vector n c)
unzip3 = V.unzip3
{-# inline unzip3 #-}
unzip4 :: (Storable a, Storable b, Storable c, Storable d,
           Storable (a, b, c, d))
       => Vector n (a, b, c, d) -> (Vector n a, Vector n b, Vector n c, Vector n d)
unzip4 = V.unzip4
{-# inline unzip4 #-}
unzip5 :: (Storable a, Storable b, Storable c, Storable d, Storable e,
           Storable (a, b, c, d, e))
       => Vector n (a, b, c, d, e) -> (Vector n a, Vector n b, Vector n c, Vector n d, Vector n e)
unzip5 = V.unzip5
{-# inline unzip5 #-}
unzip6 :: (Storable a, Storable b, Storable c, Storable d, Storable e,
           Storable f, Storable (a, b, c, d, e, f))
       => Vector n (a, b, c, d, e, f) -> (Vector n a, Vector n b, Vector n c, Vector n d, Vector n e, Vector n f)
unzip6 = V.unzip6
{-# inline unzip6 #-}
infix 4 `elem`
elem :: (Storable a, Eq a) => a -> Vector n a -> Bool
elem = V.elem
{-# inline elem #-}
infix 4 `notElem`
notElem :: (Storable a, Eq a) => a -> Vector n a -> Bool
notElem = V.notElem
{-# inline notElem #-}
find :: Storable a => (a -> Bool) -> Vector n a -> Maybe a
find = V.find
{-# inline find #-}
findIndex :: Storable a => (a -> Bool) -> Vector n a -> Maybe (Finite n)
findIndex = V.findIndex
{-# inline findIndex #-}
elemIndex :: (Storable a, Eq a) => a -> Vector n a -> Maybe (Finite n)
elemIndex = V.elemIndex
{-# inline elemIndex #-}
foldl :: Storable b => (a -> b -> a) -> a -> Vector n b -> a
foldl = V.foldl
{-# inline foldl #-}
foldl1 :: Storable a => (a -> a -> a) -> Vector (1+n) a -> a
foldl1 = V.foldl1
{-# inline foldl1 #-}
foldl' :: Storable b => (a -> b -> a) -> a -> Vector n b -> a
foldl' = V.foldl'
{-# inline foldl' #-}
foldl1' :: Storable a => (a -> a -> a) -> Vector (1+n) a -> a
foldl1' = V.foldl1'
{-# inline foldl1' #-}
foldr :: Storable a => (a -> b -> b) -> b -> Vector n a -> b
foldr = V.foldr
{-# inline foldr #-}
foldr1 :: Storable a => (a -> a -> a) -> Vector (n+1) a -> a
foldr1 = V.foldr1
{-# inline foldr1 #-}
foldr' :: Storable a => (a -> b -> b) -> b -> Vector n a -> b
foldr' = V.foldr'
{-# inline foldr' #-}
foldr1' :: Storable a => (a -> a -> a) -> Vector (n+1) a -> a
foldr1' = V.foldr1'
{-# inline foldr1' #-}
ifoldl :: Storable b => (a -> Finite n -> b -> a) -> a -> Vector n b -> a
ifoldl = V.ifoldl
{-# inline ifoldl #-}
ifoldl' :: Storable b => (a -> Finite n -> b -> a) -> a -> Vector n b -> a
ifoldl' = V.ifoldl'
{-# inline ifoldl' #-}
ifoldr :: Storable a => (Finite n -> a -> b -> b) -> b -> Vector n a -> b
ifoldr = V.ifoldr
{-# inline ifoldr #-}
ifoldr' :: Storable a => (Finite n -> a -> b -> b) -> b -> Vector n a -> b
ifoldr' = V.ifoldr'
{-# inline ifoldr' #-}
all :: Storable a => (a -> Bool) -> Vector n a -> Bool
all = V.all
{-# inline all #-}
any :: Storable a => (a -> Bool) -> Vector n a -> Bool
any = V.any
{-# inline any #-}
and :: Vector n Bool -> Bool
and = V.and
{-# inline and #-}
or :: Vector n Bool -> Bool
or = V.or
{-# inline or #-}
sum :: (Storable a, Num a) => Vector n a -> a
sum = V.sum
{-# inline sum #-}
product :: (Storable a, Num a) => Vector n a -> a
product = V.product
{-# inline product #-}
maximum :: (Storable a, Ord a) => Vector (n+1) a -> a
maximum = V.maximum
{-# inline maximum #-}
maximumBy :: Storable a
          => (a -> a -> Ordering) -> Vector (n+1) a -> a
maximumBy = V.maximumBy
{-# inline maximumBy #-}
minimum :: (Storable a, Ord a) => Vector (n+1) a -> a
minimum = V.minimum
{-# inline minimum #-}
minimumBy :: Storable a
          => (a -> a -> Ordering) -> Vector (n+1) a -> a
minimumBy = V.minimumBy
{-# inline minimumBy #-}
maxIndex :: (Storable a, Ord a) => Vector (n+1) a -> Finite (n + 1)
maxIndex = V.maxIndex
{-# inline maxIndex #-}
maxIndexBy :: Storable a
           => (a -> a -> Ordering) -> Vector (n+1) a -> Finite (n + 1)
maxIndexBy = V.maxIndexBy
{-# inline maxIndexBy #-}
minIndex :: (Storable a, Ord a) => Vector (n+1) a -> Finite (n + 1)
minIndex = V.minIndex
{-# inline minIndex #-}
minIndexBy :: Storable a
           => (a -> a -> Ordering) -> Vector (n+1) a -> Finite (n + 1)
minIndexBy = V.minIndexBy
{-# inline minIndexBy #-}
foldM :: (Monad m, Storable b) => (a -> b -> m a) -> a -> Vector n b -> m a
foldM = V.foldM
{-# inline foldM #-}
ifoldM :: (Monad m, Storable b) => (a -> Finite n -> b -> m a) -> a -> Vector n b -> m a
ifoldM = V.ifoldM
{-# inline ifoldM #-}
fold1M :: (Monad m, Storable a)
       => (a -> a -> m a) -> Vector (1+n) a -> m a
fold1M = V.fold1M
{-# inline fold1M #-}
foldM' :: (Monad m, Storable b) => (a -> b -> m a) -> a -> Vector n b -> m a
foldM' = V.foldM'
{-# inline foldM' #-}
ifoldM' :: (Monad m, Storable b)
        => (a -> Finite n -> b -> m a) -> a -> Vector n b -> m a
ifoldM' = V.ifoldM'
{-# inline ifoldM' #-}
fold1M' :: (Monad m, Storable a)
        => (a -> a -> m a) -> Vector (n+1) a -> m a
fold1M' = V.fold1M'
{-# inline fold1M' #-}
foldM_ :: (Monad m, Storable b)
       => (a -> b -> m a) -> a -> Vector n b -> m ()
foldM_ = V.foldM_
{-# inline foldM_ #-}
ifoldM_ :: (Monad m, Storable b)
        => (a -> Finite n -> b -> m a) -> a -> Vector n b -> m ()
ifoldM_ = V.ifoldM_
{-# inline ifoldM_ #-}
fold1M_ :: (Monad m, Storable a)
        => (a -> a -> m a) -> Vector (n+1) a -> m ()
fold1M_ = V.fold1M_
{-# inline fold1M_ #-}
foldM'_ :: (Monad m, Storable b)
        => (a -> b -> m a) -> a -> Vector n b -> m ()
foldM'_ = V.foldM'_
{-# inline foldM'_ #-}
ifoldM'_ :: (Monad m, Storable b)
         => (a -> Finite n -> b -> m a) -> a -> Vector n b -> m ()
ifoldM'_ = V.ifoldM'_
{-# inline ifoldM'_ #-}
fold1M'_ :: (Monad m, Storable a)
         => (a -> a -> m a) -> Vector (n+1) a -> m ()
fold1M'_ = V.fold1M'_
{-# inline fold1M'_ #-}
sequence :: (Monad m, Storable a, Storable (m a))
         => Vector n (m a) -> m (Vector n a)
sequence = V.sequence
{-# inline sequence #-}
sequence_ :: (Monad m, Storable (m a)) => Vector n (m a) -> m ()
sequence_ = V.sequence_
{-# inline sequence_ #-}
prescanl :: (Storable a, Storable b) => (a -> b -> a) -> a -> Vector n b -> Vector n a
prescanl = V.prescanl
{-# inline prescanl #-}
prescanl' :: (Storable a, Storable b) => (a -> b -> a) -> a -> Vector n b -> Vector n a
prescanl' = V.prescanl'
{-# inline prescanl' #-}
postscanl :: (Storable a, Storable b) => (a -> b -> a) -> a -> Vector n b -> Vector n a
postscanl = V.postscanl
{-# inline postscanl #-}
postscanl' :: (Storable a, Storable b) => (a -> b -> a) -> a -> Vector n b -> Vector n a
postscanl' = V.postscanl'
{-# inline postscanl' #-}
scanl :: (Storable a, Storable b) => (a -> b -> a) -> a -> Vector n b -> Vector n a
scanl = V.scanl
{-# inline scanl #-}
scanl' :: (Storable a, Storable b) => (a -> b -> a) -> a -> Vector n b -> Vector n a
scanl' = V.scanl'
{-# inline scanl' #-}
scanl1 :: Storable a => (a -> a -> a) -> Vector (n+1) a -> Vector (n+1) a
scanl1 = V.scanl1
{-# inline scanl1 #-}
scanl1' :: Storable a => (a -> a -> a) -> Vector (n+1) a -> Vector (n+1) a
scanl1' = V.scanl1'
{-# inline scanl1' #-}
prescanr :: (Storable a, Storable b) => (a -> b -> b) -> b -> Vector n a -> Vector n b
prescanr = V.prescanr
{-# inline prescanr #-}
prescanr' :: (Storable a, Storable b) => (a -> b -> b) -> b -> Vector n a -> Vector n b
prescanr' = V.prescanr'
{-# inline prescanr' #-}
postscanr :: (Storable a, Storable b) => (a -> b -> b) -> b -> Vector n a -> Vector n b
postscanr = V.postscanr
{-# inline postscanr #-}
postscanr' :: (Storable a, Storable b) => (a -> b -> b) -> b -> Vector n a -> Vector n b
postscanr' = V.postscanr'
{-# inline postscanr' #-}
scanr :: (Storable a, Storable b) => (a -> b -> b) -> b -> Vector n a -> Vector n b
scanr = V.scanr
{-# inline scanr #-}
scanr' :: (Storable a, Storable b) => (a -> b -> b) -> b -> Vector n a -> Vector n b
scanr' = V.scanr'
{-# inline scanr' #-}
scanr1 :: Storable a => (a -> a -> a) -> Vector (n+1) a -> Vector (n+1) a
scanr1 = V.scanr1
{-# inline scanr1 #-}
scanr1' :: Storable a => (a -> a -> a) -> Vector (n+1) a -> Vector (n+1) a
scanr1' = V.scanr1'
{-# inline scanr1' #-}
toList :: Storable a => Vector n a -> [a]
toList = V.toList
{-# inline toList #-}
fromList :: (Storable a, KnownNat n) => [a] -> Maybe (Vector n a)
fromList = V.fromList
{-# inline fromList #-}
fromListN :: forall n a. (Storable a, KnownNat n)
          => [a] -> Maybe (Vector n a)
fromListN = V.fromListN
{-# inline fromListN #-}
fromListN' :: forall n a p. (Storable a, KnownNat n)
           => p n -> [a] -> Maybe (Vector n a)
fromListN' = V.fromListN'
{-# inline fromListN' #-}
withSizedList :: forall a r. Storable a
              => [a] -> (forall n. KnownNat n => Vector n a -> r) -> r
withSizedList xs = withSized (VS.fromList xs)
{-# inline withSizedList #-}
freeze :: (PrimMonad m, Storable a)
       => VSM.MVector n (PrimState m) a
       -> m (Vector n a)
freeze = V.freeze
unsafeFreeze :: (PrimMonad m, Storable a)
             => VSM.MVector n (PrimState m) a
             -> m (Vector n a)
unsafeFreeze = V.unsafeFreeze
thaw :: (PrimMonad m, Storable a)
     => Vector n a
     -> m (VSM.MVector n (PrimState m) a)
thaw = V.thaw
unsafeThaw :: (PrimMonad m, Storable a)
           => Vector n a
           -> m (VSM.MVector n (PrimState m) a)
unsafeThaw = V.unsafeThaw
copy :: (PrimMonad m, Storable a)
     => VSM.MVector n (PrimState m) a
     -> Vector n a
     -> m ()
copy = V.copy
toSized :: forall n a. (Storable a, KnownNat n)
        => VS.Vector a -> Maybe (Vector n a)
toSized = V.toSized
{-# inline toSized #-}
withSized :: forall a r. Storable a
          => VS.Vector a -> (forall n. KnownNat n => Vector n a -> r) -> r
withSized = V.withSized
{-# inline withSized #-}
fromSized :: Vector n a -> VS.Vector a
fromSized = V.fromSized
{-# inline fromSized #-}
withVectorUnsafe :: forall a b (n :: Nat). ()
                 => (VS.Vector a -> VS.Vector b) -> Vector n a -> Vector n b
withVectorUnsafe = V.withVectorUnsafe
{-# inline withVectorUnsafe #-}