A Russell loop has syntax do guard_expression ==> expression; ...; expression # guard_expression ==> expression; ...; expression ... # guard_expression ==> expression; ...; expression od A guard_expression can be either an expression with signature "val Boolean", or the keyword "else". (Any loop with an "else" guard is guaranteed not to terminate.) The loop is evaluated by evaluating the guard_expressions in any order, until a true guard is found, and then evaluating the expression sequence corresponding to the guard. This is repeated until an evaluation of all guards (in an arbitrary order, with "else" guards assumed true if no others are) results in no true guards being found. It is guaranteed that syntactically identical loops appearing in the same environment will terminate in the same state (if they do terminate). The signature of a loop is val Void. Implementation Note: The compiler really does reorder loops. Relying on first to last evaluation is likely to result in disaster. For consistency, do expression then expression; ... ; expression od is allowed, and always results in an infinite loop.