{-# 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