Recursive definitions of values

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.