linear-base-0.2.0: src/Data/Vector/Mutable/Linear.hs
{-# LANGUAGE NoImplicitPrelude #-}
-- | Mutable vectors with a linear API.
--
-- Vectors are arrays that grow automatically, that you can append to with
-- 'push'. They never shrink automatically to reduce unnecessary copying,
-- use 'shrinkToFit' to get rid of the wasted space.
--
-- To use mutable vectors, create a linear computation of type
-- @Vector a %1-> Ur b@ and feed it to 'constant' or 'fromList'.
--
-- == Example
--
-- >>> :set -XLinearTypes
-- >>> import Prelude.Linear
-- >>> import qualified Data.Vector.Mutable.Linear as Vector
-- >>> :{
-- isFirstZero :: Vector.Vector Int %1-> Ur Bool
-- isFirstZero vec =
-- Vector.get 0 vec
-- & \(Ur ret, vec) -> vec `lseq` Ur (ret == 0)
-- :}
--
-- >>> unur $ Vector.fromList [0..10] isFirstZero
-- True
-- >>> unur $ Vector.fromList [1,2,3] isFirstZero
-- False
module Data.Vector.Mutable.Linear
( -- * A mutable vector
Vector,
-- * Run a computation with a vector
empty,
constant,
fromList,
-- * Mutators
set,
unsafeSet,
modify,
modify_,
push,
pop,
filter,
mapMaybe,
slice,
shrinkToFit,
-- * Accessors
get,
unsafeGet,
size,
capacity,
toList,
freeze,
-- * Mutable-style interface
read,
unsafeRead,
write,
unsafeWrite,
)
where
import Data.Vector.Mutable.Linear.Internal