例えば
let (new_vector, old_value) = set_vector(vector, index, new_value)
in <body>
とする。

<body>のなかでvectorはもう参照できない(参照したらエラー)

set_vectorは、概念的には「vectorのうち、index番目だけを
new_valueに書き換えた新たなベクター(と、index番目に入っ
ていた元の値の組)を返す」わけだが、実装としては上書きし
ちゃってもだれも気が付かない。