You are currently looking at the v8.0.0 docs (Reason v3.6 syntax edition). You can find the latest manual page here.
ReScript has great traditional imperative & mutative programming capabilities. You should use these features sparingly, but sometimes they allow your code to be more performant and written in a more familiar pattern.
Let-bindings are immutable, but you can wrap it with a
ref, exposed as a record with a single mutable field in the standard library:
let myValue = ref(5);
You can get the actual value of a
ref box through accessing its
let five = myValue.contents; // 5
We provide a syntax shortcut for
myValue^. Though we no longer encourage it.
Assign a new value to
myValue like so:
myValue.contents = 6;
We provide a syntax sugar for this:
myValue := 6;
Note that the previous binding
5, since it got the underlying item on the
ref box, not the
Note: you might see in the JS output tabs above that
ref allocates an object. Worry not; local, non-exported
refs allocations are optimized away.
Before reaching for
ref, know that you can achieve lightweight, local "mutations" through overriding let bindings.