Besides let rec definitions of functional values, as described in the reference manual, Caml Light supports a certain class of recursive definitions of non-functional values. For instance, the following definition is accepted:
let rec x = 1 :: y and y = 2 :: x;;
and correctly binds x to the cyclic list 1::2::1::2::..., and
y to the cyclic list 2::1::2::1::...
Informally, the class of accepted definitions consists of those
definitions where the defined variables occur only inside function
bodies or as a field of a data structure. Moreover, the patterns in
the left-hand sides must be identifiers, nothing more complex.