    {-# LANGUAGE CPP #-}

    -- | Storable @Vector@. Import as:
    --
    -- > import qualified RIO.Vector.Storable as VS
    --
    -- This module does not export any partial or unsafe functions.  For those, see
    -- "RIO.Vector.Storable.Partial" and "RIO.Vector.Storable.Unsafe"
    module RIO.Vector.Storable
      (
      -- * Storable vectors
        Data.Vector.Storable.Vector
      , Data.Vector.Storable.MVector(..)
      , Data.Vector.Storable.Storable

      -- * Accessors
      -- ** Length information
      , Data.Vector.Storable.length
      , Data.Vector.Storable.null

      -- ** Indexing
      , (Data.Vector.Storable.!?)

      -- ** Extracting subvectors
      , Data.Vector.Storable.slice
      , Data.Vector.Storable.take
      , Data.Vector.Storable.drop
      , Data.Vector.Storable.splitAt

      -- * Construction
      -- ** Initialisation
      , Data.Vector.Storable.empty
      , Data.Vector.Storable.singleton
      , Data.Vector.Storable.replicate
      , Data.Vector.Storable.generate
      , Data.Vector.Storable.iterateN

      -- ** Monadic initialisation
      , Data.Vector.Storable.replicateM
      , Data.Vector.Storable.generateM
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Storable.iterateNM
    #endif
      , Data.Vector.Storable.create
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Storable.createT
    #endif

      -- ** Unfolding
      , Data.Vector.Storable.unfoldr
      , Data.Vector.Storable.unfoldrN
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Storable.unfoldrM
      , Data.Vector.Storable.unfoldrNM
    #endif
      , Data.Vector.Storable.constructN
      , Data.Vector.Storable.constructrN

      -- ** Enumeration
      , Data.Vector.Storable.enumFromN
      , Data.Vector.Storable.enumFromStepN
      , Data.Vector.Storable.enumFromTo
      , Data.Vector.Storable.enumFromThenTo

      -- ** Concatenation
      , Data.Vector.Storable.cons
      , Data.Vector.Storable.snoc
      , (Data.Vector.Storable.++)
      , Data.Vector.Storable.concat

      -- ** Restricting memory usage
      , Data.Vector.Storable.force

      -- * Modifying vectors
      -- ** Permutations
      , Data.Vector.Storable.reverse

      -- ** Safe destructive update
      , Data.Vector.Storable.modify

      -- * Elementwise operations
      -- ** Mapping
      , Data.Vector.Storable.map
      , Data.Vector.Storable.imap
      , Data.Vector.Storable.concatMap

      -- ** Monadic mapping
      , Data.Vector.Storable.mapM
      , Data.Vector.Storable.mapM_
      , Data.Vector.Storable.forM
      , Data.Vector.Storable.forM_

      -- ** Zipping
      , Data.Vector.Storable.zipWith
      , Data.Vector.Storable.zipWith3
      , Data.Vector.Storable.zipWith4
      , Data.Vector.Storable.zipWith5
      , Data.Vector.Storable.zipWith6
      , Data.Vector.Storable.izipWith
      , Data.Vector.Storable.izipWith3
      , Data.Vector.Storable.izipWith4
      , Data.Vector.Storable.izipWith5
      , Data.Vector.Storable.izipWith6

      -- ** Monadic zipping
      , Data.Vector.Storable.zipWithM
      , Data.Vector.Storable.zipWithM_

      -- * Working with predicates
      -- ** Filtering
      , Data.Vector.Storable.filter
      , Data.Vector.Storable.ifilter
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Storable.uniq
      , Data.Vector.Storable.mapMaybe
      , Data.Vector.Storable.imapMaybe
    #endif
      , Data.Vector.Storable.filterM
      , Data.Vector.Storable.takeWhile
      , Data.Vector.Storable.dropWhile

      -- ** Partitioning
      , Data.Vector.Storable.partition
      , Data.Vector.Storable.unstablePartition
      , Data.Vector.Storable.span
      , Data.Vector.Storable.break

      -- ** Searching
      , Data.Vector.Storable.elem
      , Data.Vector.Storable.notElem
      , Data.Vector.Storable.find
      , Data.Vector.Storable.findIndex
      , Data.Vector.Storable.findIndices
      , Data.Vector.Storable.elemIndex
      , Data.Vector.Storable.elemIndices

      -- * Folding
      , Data.Vector.Storable.foldl
      , Data.Vector.Storable.foldl'
      , Data.Vector.Storable.foldr
      , Data.Vector.Storable.foldr'
      , Data.Vector.Storable.ifoldl
      , Data.Vector.Storable.ifoldl'
      , Data.Vector.Storable.ifoldr
      , Data.Vector.Storable.ifoldr'

      -- ** Specialised folds
      , Data.Vector.Storable.all
      , Data.Vector.Storable.any
      , Data.Vector.Storable.and
      , Data.Vector.Storable.or
      , Data.Vector.Storable.sum
      , Data.Vector.Storable.product

      -- ** Monadic folds
      , Data.Vector.Storable.foldM
      , Data.Vector.Storable.foldM'
      , Data.Vector.Storable.foldM_
      , Data.Vector.Storable.foldM'_

      -- * Prefix sums (scans)
      , Data.Vector.Storable.prescanl
      , Data.Vector.Storable.prescanl'
      , Data.Vector.Storable.postscanl
      , Data.Vector.Storable.postscanl'
      , Data.Vector.Storable.scanl
      , Data.Vector.Storable.scanl'
      , Data.Vector.Storable.prescanr
      , Data.Vector.Storable.prescanr'
      , Data.Vector.Storable.postscanr
      , Data.Vector.Storable.postscanr'
      , Data.Vector.Storable.scanr
      , Data.Vector.Storable.scanr'

      -- * Conversions
      -- ** Lists
      , Data.Vector.Storable.toList
      , Data.Vector.Storable.fromList
      , Data.Vector.Storable.fromListN

      -- ** Different vector types
      , Data.Vector.Storable.convert

      -- ** Mutable vectors
      , Data.Vector.Storable.freeze
      , Data.Vector.Storable.thaw
      , Data.Vector.Storable.copy
      ) where

    import qualified Data.Vector.Storable