In functional programming, in particular the ML programming language family, the value restriction means that declarations are only polymorphically generalized if they are syntactic values (also called non-expansive).
In functional programming, in particular the ML programming language family, the value restriction means that declarations are only polymorphically generalized if they are syntactic values (also called non-expansive). The value restriction prevents reference cells from holding values of different types and preserves type safety.
Some interesting notes on value restriction
http://en.wikipedia.org/wiki/Value_restriction
For F#
Automatic Generalization
Subtyping, overloading and inline functions
Defining the value restriction
Imperative programming necessitates the value restriction