While you can't change which value is bound to a variable, you can change the value itself!
Sometimes. Certain values are mutable and certain values are not.
"Mutable values but not mutable variables? Isn't this a distinction without a difference?"
No. This scheme allows the OCaml compiler both to:
Each type of mutable value has it's own distinct syntax for mutation (updating); this helps catch errors:
Let's make every other character in a string 'x':
let str = "fuzzy" in for i = 0 to String.length str do if i mod 2 = 0 then str.[i] <- 'x' else () done