## 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.