OCaml&#x27;s parsing rules are pretty opaque sometimes. For example, if you have an &quot;if&quot; statement that&#x27;s just performing effects (not returning a value), you may run into behavior like this:<p><pre><code>    # let x = ref 0;;
    val x : int ref = {contents = 0}
    # let y = ref 0;;
    val y : int ref = {contents = 0}
    # if false then
        x := 1;
        y := 1;
      ;;
    - : unit = ()
    # (!x, !y);;
    - : int * int = (0, 1)
    # y := 0;;
    - : unit = ()
    # if false then
        let z = 1 in
        x := z;
        y := z;
      ;;
    - : unit = ()
    # (!x, !y);;
    - : int * int = (0, 0)</code></pre>