linear-base-0.2.0: src/Data/Array/Mutable/Linear.hs
{-# LANGUAGE LinearTypes #-}
-- |
-- This module provides a pure linear interface for arrays with in-place
-- mutation.
--
-- To use these mutable arrays, create a linear computation of type
-- @Array a %1-> Ur b@ and feed it to 'alloc' or 'fromList'.
--
-- == A Tiny Example
--
-- >>> :set -XLinearTypes
-- >>> :set -XNoImplicitPrelude
-- >>> import Prelude.Linear
-- >>> import qualified Data.Array.Mutable.Linear as Array
-- >>> :{
-- isFirstZero :: Array.Array Int %1-> Ur Bool
-- isFirstZero arr =
-- Array.get 0 arr
-- & \(Ur val, arr') -> arr' `lseq` Ur (val == 0)
-- :}
--
-- >>> unur $ Array.fromList [0..10] isFirstZero
-- True
-- >>> unur $ Array.fromList [1,2,3] isFirstZero
-- False
module Data.Array.Mutable.Linear
( -- * Mutable Linear Arrays
Array,
-- * Performing Computations with Arrays
alloc,
allocBeside,
fromList,
-- * Modifications
set,
unsafeSet,
resize,
map,
-- * Accessors
get,
unsafeGet,
size,
slice,
toList,
freeze,
-- * Mutable-style interface
read,
unsafeRead,
write,
unsafeWrite,
)
where
import Data.Array.Mutable.Linear.Internal
import Prelude hiding (map, read)