    {-# LANGUAGE CPP #-}

    -- | Generic @Vector@ interface. Import as:

    --

    -- > import qualified RIO.Vector as V

    --

    -- This module does not export any partial or unsafe functions.  For those, see

    -- "RIO.Vector.Partial" and "RIO.Vector.Unsafe"

    module RIO.Vector
      (
      -- * Immutable vectors

        Data.Vector.Generic.Vector

      -- * Accessors

      -- ** Length information

      , Data.Vector.Generic.length
      , Data.Vector.Generic.null

      -- ** Indexing

      , (Data.Vector.Generic.!?)

      -- ** Extracting subvectors

      , Data.Vector.Generic.slice
      , Data.Vector.Generic.take
      , Data.Vector.Generic.drop
      , Data.Vector.Generic.splitAt

      -- * Construction

      -- ** Initialisation

      , Data.Vector.Generic.empty
      , Data.Vector.Generic.singleton
      , Data.Vector.Generic.replicate
      , Data.Vector.Generic.generate
      , Data.Vector.Generic.iterateN

      -- ** Monadic initialisation

      , Data.Vector.Generic.replicateM
      , Data.Vector.Generic.generateM
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.iterateNM
    #endif
      , Data.Vector.Generic.create
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.createT
    #endif

      -- ** Unfolding

      , Data.Vector.Generic.unfoldr
      , Data.Vector.Generic.unfoldrN
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.unfoldrM
      , Data.Vector.Generic.unfoldrNM
    #endif
      , Data.Vector.Generic.constructN
      , Data.Vector.Generic.constructrN

      -- ** Enumeration

      , Data.Vector.Generic.enumFromN
      , Data.Vector.Generic.enumFromStepN
      , Data.Vector.Generic.enumFromTo
      , Data.Vector.Generic.enumFromThenTo

      -- ** Concatenation

      , Data.Vector.Generic.cons
      , Data.Vector.Generic.snoc
      , (Data.Vector.Generic.++)
      , Data.Vector.Generic.concat
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.concatNE
    #endif

      -- ** Restricting memory usage

      , Data.Vector.Generic.force

      -- * Modifying vectors

      -- ** Permutations

      , Data.Vector.Generic.reverse

      -- ** Safe destructive update

      , Data.Vector.Generic.modify

      -- * Elementwise operations

      -- ** Indexing

      , Data.Vector.Generic.indexed

      -- ** Mapping

      , Data.Vector.Generic.map
      , Data.Vector.Generic.imap
      , Data.Vector.Generic.concatMap

      -- ** Monadic mapping

      , Data.Vector.Generic.mapM
      , Data.Vector.Generic.imapM
      , Data.Vector.Generic.mapM_
      , Data.Vector.Generic.imapM_
      , Data.Vector.Generic.forM
      , Data.Vector.Generic.forM_

      -- ** Zipping

      , Data.Vector.Generic.zipWith
      , Data.Vector.Generic.zipWith3
      , Data.Vector.Generic.zipWith4
      , Data.Vector.Generic.zipWith5
      , Data.Vector.Generic.zipWith6
      , Data.Vector.Generic.izipWith
      , Data.Vector.Generic.izipWith3
      , Data.Vector.Generic.izipWith4
      , Data.Vector.Generic.izipWith5
      , Data.Vector.Generic.izipWith6
      , Data.Vector.Generic.zip
      , Data.Vector.Generic.zip3
      , Data.Vector.Generic.zip4
      , Data.Vector.Generic.zip5
      , Data.Vector.Generic.zip6

      -- ** Monadic zipping

      , Data.Vector.Generic.zipWithM
      , Data.Vector.Generic.izipWithM
      , Data.Vector.Generic.zipWithM_
      , Data.Vector.Generic.izipWithM_

      -- ** Unzipping

      , Data.Vector.Generic.unzip
      , Data.Vector.Generic.unzip3
      , Data.Vector.Generic.unzip4
      , Data.Vector.Generic.unzip5
      , Data.Vector.Generic.unzip6

      -- * Working with predicates

      -- ** Filtering

      , Data.Vector.Generic.filter
      , Data.Vector.Generic.ifilter
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.uniq
      , Data.Vector.Generic.mapMaybe
      , Data.Vector.Generic.imapMaybe
    #endif
      , Data.Vector.Generic.filterM
      , Data.Vector.Generic.takeWhile
      , Data.Vector.Generic.dropWhile

      -- ** Partitioning

      , Data.Vector.Generic.partition
      , Data.Vector.Generic.unstablePartition
      , Data.Vector.Generic.span
      , Data.Vector.Generic.break

      -- ** Searching

      , Data.Vector.Generic.elem
      , Data.Vector.Generic.notElem
      , Data.Vector.Generic.find
      , Data.Vector.Generic.findIndex
      , Data.Vector.Generic.findIndices
      , Data.Vector.Generic.elemIndex
      , Data.Vector.Generic.elemIndices

      -- * Folding

      , Data.Vector.Generic.foldl
      , Data.Vector.Generic.foldl'
      , Data.Vector.Generic.foldr
      , Data.Vector.Generic.foldr'
      , Data.Vector.Generic.ifoldl
      , Data.Vector.Generic.ifoldl'
      , Data.Vector.Generic.ifoldr
      , Data.Vector.Generic.ifoldr'

      -- ** Specialised folds

      , Data.Vector.Generic.all
      , Data.Vector.Generic.any
      , Data.Vector.Generic.and
      , Data.Vector.Generic.or
      , Data.Vector.Generic.sum
      , Data.Vector.Generic.product

      -- ** Monadic folds

      , Data.Vector.Generic.foldM
      , Data.Vector.Generic.ifoldM
      , Data.Vector.Generic.foldM'
      , Data.Vector.Generic.ifoldM'
      , Data.Vector.Generic.foldM_
      , Data.Vector.Generic.ifoldM_
      , Data.Vector.Generic.foldM'_
      , Data.Vector.Generic.ifoldM'_

      -- ** Monadic sequencing

      , Data.Vector.Generic.sequence
      , Data.Vector.Generic.sequence_

      -- * Prefix sums (scans)

      , Data.Vector.Generic.prescanl
      , Data.Vector.Generic.prescanl'
      , Data.Vector.Generic.postscanl
      , Data.Vector.Generic.postscanl'
      , Data.Vector.Generic.scanl
      , Data.Vector.Generic.scanl'
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.iscanl
      , Data.Vector.Generic.iscanl'
    #endif
      , Data.Vector.Generic.prescanr
      , Data.Vector.Generic.prescanr'
      , Data.Vector.Generic.postscanr
      , Data.Vector.Generic.postscanr'
      , Data.Vector.Generic.scanr
      , Data.Vector.Generic.scanr'
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.iscanr
      , Data.Vector.Generic.iscanr'
    #endif

      -- * Conversions

      -- ** Lists

      , Data.Vector.Generic.toList
      , Data.Vector.Generic.fromList
      , Data.Vector.Generic.fromListN

      -- ** Different vector types

      , Data.Vector.Generic.convert

      -- ** Mutable vectors

      , Data.Vector.Generic.freeze
      , Data.Vector.Generic.thaw
      , Data.Vector.Generic.copy

      -- * Fusion support

      -- ** Conversion to/from Bundles

      , Data.Vector.Generic.stream
      , Data.Vector.Generic.unstream
      , Data.Vector.Generic.streamR
      , Data.Vector.Generic.unstreamR

      -- ** Recycling support

      , Data.Vector.Generic.new
      , Data.Vector.Generic.clone

      -- * Utilities

      -- ** Comparisons

      , Data.Vector.Generic.eq
      , Data.Vector.Generic.cmp
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.eqBy
      , Data.Vector.Generic.cmpBy
    #endif

      -- ** Show and Read

      , Data.Vector.Generic.showsPrec
      , Data.Vector.Generic.readPrec
    #if MIN_VERSION_vector(0,12,0)
      , Data.Vector.Generic.liftShowsPrec
      , Data.Vector.Generic.liftReadsPrec
    #endif

      -- ** @Data@ and @Typeable@

      , Data.Vector.Generic.gfoldl
      , Data.Vector.Generic.dataCast
      , Data.Vector.Generic.mkType
      ) where

    import qualified Data.Vector.Generic