{-# LANGUAGE CPP #-}
-- | @Seq@. Import as:
--
-- > import qualified RIO.Seq as Seq
module RIO.Seq
  (
    Data.Sequence.Seq(..)

    -- * Construction
  , Data.Sequence.empty
  , Data.Sequence.singleton
  , (Data.Sequence.<|)
  , (Data.Sequence.|>)
  , (Data.Sequence.><)
  , Data.Sequence.fromList
  , Data.Sequence.fromFunction
  , Data.Sequence.fromArray

    -- ** Repetition
  , Data.Sequence.replicate
  , Data.Sequence.replicateA
  , Data.Sequence.replicateM
#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.cycleTaking
#endif

    -- ** Iterative construction
  , Data.Sequence.iterateN
  , Data.Sequence.unfoldr
  , Data.Sequence.unfoldl

    -- * Deconstruction
    -- | Additional functions for deconstructing sequences are available via the
    -- 'Foldable' instance of 'Seq'.

    -- ** Queries
  , Data.Sequence.null
  , Data.Sequence.length
    -- ** Views
  , Data.Sequence.ViewL(..)
  , Data.Sequence.viewl
  , Data.Sequence.ViewR(..)
  , Data.Sequence.viewr

    -- * Scans
  , Data.Sequence.scanl
  , Data.Sequence.scanl1
  , Data.Sequence.scanr
  , Data.Sequence.scanr1

    -- * Sublists
  , Data.Sequence.tails
  , Data.Sequence.inits
#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.chunksOf
#endif

    -- ** Sequential searches
  , Data.Sequence.takeWhileL
  , Data.Sequence.takeWhileR
  , Data.Sequence.dropWhileL
  , Data.Sequence.dropWhileR
  , Data.Sequence.spanl
  , Data.Sequence.spanr
  , Data.Sequence.breakl
  , Data.Sequence.breakr
  , Data.Sequence.partition
  , Data.Sequence.filter

    -- * Sorting
  , Data.Sequence.sort
  , Data.Sequence.sortBy
  , Data.Sequence.unstableSort
  , Data.Sequence.unstableSortBy

    -- * Indexing
#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.lookup
  , (Data.Sequence.!?)
#endif
  , Data.Sequence.index
  , Data.Sequence.adjust

#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.adjust'
#endif
  , Data.Sequence.update
  , Data.Sequence.take
  , Data.Sequence.drop
#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.insertAt
  , Data.Sequence.deleteAt
#endif
  , Data.Sequence.splitAt

    -- ** Indexing with predicates
    -- | These functions perform sequential searches from the left or right ends
    -- of the sequence elements.
  , Data.Sequence.elemIndexL
  , Data.Sequence.elemIndicesL
  , Data.Sequence.elemIndexR
  , Data.Sequence.elemIndicesR
  , Data.Sequence.findIndexL
  , Data.Sequence.findIndicesL
  , Data.Sequence.findIndexR
  , Data.Sequence.findIndicesR

    -- * Folds
    -- | General folds are available via the 'Foldable' instance of 'Seq'.
#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.foldMapWithIndex
#endif
  , Data.Sequence.foldlWithIndex
  , Data.Sequence.foldrWithIndex

    -- * Transformations
  , Data.Sequence.mapWithIndex
#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.traverseWithIndex
#endif
  , Data.Sequence.reverse
#if MIN_VERSION_containers(0, 5, 8)
  , Data.Sequence.intersperse
#endif

    -- ** Zips
  , Data.Sequence.zip
  , Data.Sequence.zipWith
  , Data.Sequence.zip3
  , Data.Sequence.zipWith3
  , Data.Sequence.zip4
  , Data.Sequence.zipWith4
  ) where

import qualified Data.Sequence