content: {-# 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)
  