The Nix language is
It only exists for the Nix package manager: to describe packages and configurations as well as their variants and compositions. It is not intended for general purpose use.
There is no notion of executing sequential steps. Dependencies between operations are established only through data.
Values cannot change during computation. Functions always produce the same output if their input does not change.
Functions are like any other value. Functions can be assigned to names, taken as arguments, or returned by functions.
Expressions are only evaluated when their value is needed.
Type errors are only detected when expressions are evaluated.