Non-strict programming languages