repa-2.1.0.1: Data/Array/Repa/Operators/Modify.hs
{-# OPTIONS_HADDOCK hide #-}
module Data.Array.Repa.Operators.Modify
( -- * Bulk updates
(//))
where
import Data.Array.Repa.Shape
import Data.Array.Repa.Internals.Elt
import Data.Array.Repa.Internals.Base
{-
stage :: String
stage = "Data.Array.Repa.Operators.Modify"
-}
-- Bulk updates ----------------------------------------------------------------
-- | For each pair @(sh, a)@ from the list of index/value pairs, replace the
-- element at position @sh@ by @a@.
--
-- > update <5,9,2,7> [(2,1),(0,3),(2,8)] = <3,9,8,7>
--
{-# INLINE (//) #-}
(//) :: (Shape sh, Elt a) => Array sh a -> [(sh,a)] -> Array sh a
(//) arr us
= fromFunction
(extent arr)
(\sh -> case lookup sh us of
Just a -> a
Nothing -> index arr sh)
{-
-- For each pair @(sh, a)@ from the array of index/value pairs, replace the
-- element at position @sh@ by @a@.
--
-- > update <5,9,2,7> <(2,1),(0,3),(2,8)> = <3,9,8,7>
--
{-# INLINE update #-}
update :: Shape sh
=> Array sh a -- ^ initial array
-> Array sh (sh, a) -- ^ array of shape/value pairs
-> Array sh a
update _arr _us = error $ stage ++ ".update: not defined yet"
-- Same as 'update', but without bounds checks
--
{-# INLINE unsafeUpdate #-}
unsafeUpdate :: Shape sh
=> Array sh a
-> Array sh (sh, a)
-> Array sh a
unsafeUpdate _arr _us = error $ stage ++ ".unsafeUpdate: not defined yet"
-}