{-# LANGUAGE CPP #-}

-- | Boxed @Vector@. Import as:

--

-- > import qualified RIO.Vector.Boxed as VB

--

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

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

module RIO.Vector.Boxed
  (
  -- * Boxed vectors

    Data.Vector.Vector
  , Data.Vector.MVector

  -- * Accessors

  -- ** Length information

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

  -- ** Indexing

  , (Data.Vector.!?)

  -- ** Extracting subvectors

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

  -- * Construction

  -- ** Initialisation

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

  -- ** Monadic initialisation

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

  -- ** Unfolding

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

  -- ** Enumeration

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

  -- ** Concatenation

  , Data.Vector.cons
  , Data.Vector.snoc
  , (Data.Vector.++)
  , Data.Vector.concat

  -- ** Restricting memory usage

  , Data.Vector.force

  -- * Modifying vectors

  -- ** Permutations

  , Data.Vector.reverse

  -- ** Safe destructive update

  , Data.Vector.modify

  -- * Elementwise operations

  -- ** Indexing

  , Data.Vector.indexed

  -- ** Mapping

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

  -- ** Monadic mapping

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

  -- ** Zipping

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

  -- ** Monadic zipping

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

  -- ** Unzipping

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

  -- * Working with predicates

  -- ** Filtering

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

  -- ** Partitioning

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

  -- ** Searching

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

  -- * Folding

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

  -- ** Specialised folds

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

  -- ** Monadic folds

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

  -- ** Monadic sequencing

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

  -- * Prefix sums (scans)

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

  -- * Conversions

  -- ** Lists

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

  -- ** Different vector types

  , Data.Vector.convert

  -- ** Mutable vectors

  , Data.Vector.freeze
  , Data.Vector.thaw
  , Data.Vector.copy
  ) where

import qualified Data.Vector