Prelude> let x = [1, 2, 3]
Prelude> x
[1,2,3]
Prelude> x // [(2,42)]
<interactive>:5:3:
Not in scope: `//'
Perhaps you meant one of these:
`/' (imported from Prelude), `/=' (imported from Prelude)
The prelude isn't everything in Haskell. Just like you need to import sys or do import re in python to get at things less used here too you have to do the same.
λ :m Data.Array
λ let x = array (1,3) [(1,1), (2,2), (3,3)]
x :: (Num e, Num i, Ix i) => Array i e
λ x
array (1,3) [(1,1),(2,2),(3,3)]
it :: (Ix i, Num i, Num e) => Array i e
λ x // [(2,42)]
array (1,3) [(1,1),(2,42),(3,3)]
it :: (Num i, Num e, Ix i) => Array i e
λ x
array (1,3) [(1,1),(2,2),(3,3)]
it :: (Ix i, Num i, Num e) => Array i e
Note however that this isn't mutating x directly, to do mutation would require state or a monad.
I understand the source of your question -- not all languages
provide arrays in the included-by-default namespace. Python for example requires you to import an array module. These are part of the standard library in both cases.
This makes it a little harder to get started but considering the kinds of things programmers put up with on a daily basis is extremely mild.
(//) is a function that takes an array and a list of pairs of indexes and values and returns an array with those indexes set to those values.