For loops iterate from a starting value up to (and including) the ending value.
for myBinding in (startValue) to (endValue) {
  /* use myBinding here */
};The parenthesis around startValue and endValue may be omitted if they are
unnecessary.
let xStart = 1;
let xEnd = 3;
/* prints: 1 2 3 */
for x in xStart to xEnd {
  print_int x;
  print_string " ";
};You can make the for loop count in the opposite direction by using downto.
for myBinding in (startValue) downto (endValue) {
  statements
};let xStart = 3;
let xEnd = 1;
/* prints: 3 2 1 */
for x in xStart downto xEnd {
  print_int x;
  print_string " ";
};While loops execute a code block while some condition is true. The form of a while loop includes a single expression, the condition to test.
while (testCondition) {
  statements;
};There's no loop-breaking break keyword (nor early return from functions, for that matter) in Reason. In general, prefer map/filter/reduce over imperative loops. However, we can break out of a while loop easily through using a mutable binding.
Random.self_init ();
let break = ref false;
while (not !break) {
  if (Random.int 10 === 3) {
    break := true
  } else {
    print_endline "hello"
  }
};