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